Я пытаюсь создать MediaTypeFormatter для обработки text/csv, но при запуске нескольких проблем при использовании $expand в запросе OData.
Query:
http://localhost/RestBlog/api/Blogs/121?$expand=Comments
Контроллер:
[EnableQuery]
public IQueryable<Blog> GetBlog(int id)
{
    return DbCtx.Blog.Where(x => x.blogID == id);
}
В текстовом формате:
private static MethodInfo _createStreamWriter =
        typeof(CsvFormatter)
        .GetMethods(BindingFlags.Static | BindingFlags.NonPublic)
        .Single(m => m.Name == "StreamWriter");
internal static void StreamWriter<T, X>(T results)
{
    var queryableResult = results as IQueryable<X>;
    if (queryableResult != null)
    {
        var actualResults = queryableResult.ToList<X>();
    }
}
public override void WriteToStream(Type type, object value,
    Stream writeStream, HttpContent content)
{
    Type genericType = type.GetGenericArguments()[0];
    _createStreamWriter.MakeGenericMethod(
               new Type[] { value.GetType(), genericType })
                .Invoke(null, new object[] { value }
       );
}
Обратите внимание, что тип value равен System.Data.Entity.Infrastructure.DbQuery<System.Web.Http.OData.Query.Expressions.SelectExpandBinder.SelectAllAndExpand<Rest.Blog>>, что означает, что он не работает.
Тип value должен быть IQueryable, но после кастования он возвращает null.
При выполнении запроса без $expand все работает намного разумнее. Что я делаю неправильно?
Я просто пытаюсь получить данные перед тем, как вывести их как CSV, поэтому руководство будет с большой благодарностью.