gee*_*yUK 27 c# linq entity-framework odata asp.net-web-api
我正在尝试创建一个MediaTypeFormatter处理text/csv但$expand在OData查询中使用时遇到一些问题.
查询:
http://localhost/RestBlog/api/Blogs/121?$expand=Comments
Run Code Online (Sandbox Code Playgroud)
控制器:
[EnableQuery]
public IQueryable<Blog> GetBlog(int id)
{
return DbCtx.Blog.Where(x => x.blogID == id);
}
Run Code Online (Sandbox Code Playgroud)
在我的媒体类型格式化程序中:
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 }
);
}
Run Code Online (Sandbox Code Playgroud)
请注意,类型value是System.Data.Entity.Infrastructure.DbQuery<System.Web.Http.OData.Query.Expressions.SelectExpandBinder.SelectAllAndExpand<Rest.Blog>>表示它不起作用.
value应该是类型,IQueryable但在铸造它返回null.
在没有$expand事情的情况下进行查询时更合理.我究竟做错了什么?
我只想在输出为CSV之前尝试获取数据,因此非常感谢指导.
SelectExpandBinder.SelectAllAndExpand是的子类SelectExpandWrapper它实现IEdmEntityObject和ISelectExpandWrapper.使用ISelectExpandWrapper.ToDictionary方法,您可以获取底层实体的属性.这是从SelectExpandWrapperConverter可以看到对象被序列化为JSON的方式.
| 归档时间: |
|
| 查看次数: |
2291 次 |
| 最近记录: |