0

既存の内部 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 を作成することです。

4

0 に答える 0