OData的查询和类型比其他的IQueryable中的ASP.NET Web API(OData q

2019-07-29 06:24发布

我建立一个返回Atom或RSS源的ASP.NET Web API应用程序。 要做到这一点,它建立一个System.ServiceModel.Syndication.SyndicationFeed和定制MediaTypeFormatter是负责处理HTTP Accept报头,将所述SyndicationFeed到任何一个Atom10FeedFormatterRss20FeedFormatter ,和流的结果来响应流。 到现在为止还挺好。

我的控制器看起来是这样的:

    public class FeedController : ApiController
    {
        public HttpResponseMessage Get()
        {
            FeedRepository feedRepository = new FeedRepository();
            HttpResponseMessage<SyndicationFeed> successResponseMessage = new HttpResponseMessage<SyndicationFeed>(feedRepository.GetSyndicationFeed());
            return successResponseMessage;
        }
    }

我想这样做是利用内置的OData查询来过滤我的饲料,但改变的返回类型Get()方法IQueryable<SyndicationFeed>显然不会因为工作SyndicationFeed没有实现IQueryable

有没有办法使用内置的OData的查询方式IEnumerable<SyndicationItem>的财产SyndicationFeed

Answer 1:

这个问题已不再重要,因为微软移除的OData查询的基本支持,这是在网络API的测试版版本。

未来的版本将包括更完整的OData支持。 还有就是这可早期通过建立和CodePlex上和的NuGet这里有更多的细节: http://blogs.msdn.com/b/alexj/archive/2012/08/15/odata-support-in-asp-net织网,api.aspx



Answer 2:

该System.Linq的命名空间提供了一个名为扩展方法AsQueryable已到IEnumerable接口。 您的代码将沿此线看:

public class FeedController : ApiController
{
    public IQueryable<SyndicationFeed> Get()
    {
        FeedRepository feedRepository = new FeedRepository();

        //TODO: Make sure your property handles empty/null results:
        return feedRepository.GetSyndicationFeed()
                   .YourEnumerableProperty.AsQueryable();
    }
}


Answer 3:

你不必与OData的工作时,从控制器返回IQuerable。 在检查“调用查询选项直接”部分https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options

对于你的情况下,它会是这样的:

public SyndicationFeed Get(ODataQueryOptions<SyndicationItem> opts)
{
    var settings = new ODataValidationSettings();

    opts.Validate(settings);

    SyndicationFeed result = feedRepository.GetSyndicationFeed();

    result.Items = opts.ApplyTo(result.Items.AsQuerable()).ToArray();

    return result;
}


文章来源: OData queries and types other than IQueryable in ASP.NET Web API