【发布时间】:2013-11-03 08:22:15
【问题描述】:
这是我的问题。我正在使用 ASP.NET Web API 2.0 和 QueryableAttribute 来利用一些 OData 过滤功能。
public class VideoController : ApiController
{
[HttpGet]
[Route("activevideos")]
[Queryable]
public IEnumerable<Video> GetActiveVideos(ODataQueryOptions<Video> options)
{
return new GetvContext().Videos.Where(c => c.IsActive);
}
}
现在,我有一个类用于修改响应对象和包含的实体。这在我开始使用 QueryableAttribute 之前工作正常。在此之前,我从前一个方法返回一个 List 而不是 IEnumerable。
public class TestMessageProcessHandler : MessageProcessingHandler
{
protected override HttpResponseMessage ProcessResponse(
HttpResponseMessage response, CancellationToken cancellationToken)
{
var content = ((ObjectContent)(response.Content)).Value;
// Do something here with the content. This used to be a List<Video>
// but now the object it is of type:
// System.Data.Entity.Infrastructure.DbQuery<System.Web.Http.OData.Query.Expressions.SelectExpandBinder.SelectSome<Content.Api.Video>>
}
}
我需要能够从中获取实体,但我不确定如何从类型中获取:
System.Data.Entity.Infrastructure.DbQuery<System.Web.Http.OData.Query.Expressions.SelectExpandBinder.SelectSome<Content.Api.Video>> 改成List<Video> 这样我就可以修改Video 对象。
【问题讨论】:
-
我完全没有使用 OData 的经验,所以我在这里可能完全错了,但
GetActiveVideos方法不应该返回IQueryable<Video>而不是IEnumerable<Video>吗?尽管 OData 可能能够对其进行查询,但它不会限制从数据库返回的记录数。
标签: c# entity-framework asp.net-web-api odata