例如,我有一个包含以下字段的数据库表:
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来实现吗?
答案 0 :(得分:0)
可以通过这种方式解决:
派生ODataQueryOptions并覆盖其ApplyTo方法。这是基类: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http.OData/OData/Query/ODataQueryOptions.cs
在控制器中使用派生类:
public XXXXXController
{
public IHttpActionResult(MyODataQueryOptions options)
{
var products = this.GetProducts().AsQueryable();
return Ok(options.ApplyTo(products));
}
}