如何公开返回实体框架和文件系统结果组合的Web API OData服务?

时间:2014-02-14 16:57:26

标签: linq entity-framework odata

例如,我有一个包含以下字段的数据库表:

ID 
Type
FilePath

为该表创建实体框架模型。该模型用于为OData服务创建EDM。

我想使用Odata服务来过滤数据库字段,并根据位于文件路径的文件内容过滤结果。

例如,我希望能够使用这样的语法来获取Type以“procedure”开头的所有记录,并且内容包含单词“test”:

$filter=startswith(Type,'procedure') and substringof('test', FileContent)

我希望首先应用数据库过滤器,以便减少要读取的FileContents。我还想使用流逐个读取FileContents,而不是将它们全部加载到内存中。

这可以通过创建某种IQueryable对象来通过LINQ完成吗? 可以通过将属性附加到EDM并以不同方式对其进行处理,通过Web API OData来实现吗?

1 个答案:

答案 0 :(得分:0)

可以通过这种方式解决:

  1. 添加一个属性,将内容称为实体类型。
  2. 派生ODataQueryOptions并覆盖其ApplyTo方法。这是基类: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http.OData/OData/Query/ODataQueryOptions.cs

  3. 在控制器中使用派生类:

    public XXXXXController
    {
        public IHttpActionResult(MyODataQueryOptions options)
        {
            var products = this.GetProducts().AsQueryable();
    
            return Ok(options.ApplyTo(products));
        }
    }