WebApi OData服务与其他OData服务作为源

时间:2016-04-27 21:51:33

标签: asp.net-web-api odata linq-expressions iqueryprovider

我有现有的内部OData服务。

目标是为外部用户创建新服务。

我尝试使用odata客户端创建IQueryable,然后使用添加了过滤器的WebApi公开它。

//autogenerated by T4 from odata client
public partial class Container : Microsoft.OData.Client.DataServiceContext
{
   ...
   public DataServiceQuery<Model> Models {...}
}
//minified version of generated model
public class Model
{
    public int Type { get; set; }
    public string Test { get; set; }
}
//api controller
private Container client;
[EnableQuery]
public IQueryable<Model> Get()
{
   return client.Models.Where(i=>i.Type==123);
}

就这么简单。但它不起作用。 看起来ms odata客户端的QueryProvider不支持由ms webapi odata构建的表达式。

此代码正常运行

client.Models.Where(i=>i.Type==123).Where(i=>i.Test.Contains("qwe")).ToList()

此请求不是

http://localhost:44301/Model?$filter=contains(Test,'qwe')

异常

The expression (IIF((($it.Test== null) OrElse False), null, Convert($it.Test.Contains(\"qwe\"))) == True) is not supported.

我喜欢这个想法,因为我不需要缓存数据,只提供查询。

有没有办法让这项工作?

现在只有我看到的选项是编写自定义QueryProvider。

0 个答案:

没有答案
相关问题