次のようなクエリがあります
var query = (from x in NetworkDevices
where
x.Name == "blabla1" ||
x.Name == "blabla2"
select x );
Odata エンドポイントに対して実行しているため、効果的に次の URL に変換されます。
https://targetserver/endpoint.svc/NetworkDevices()?$filter=Name eq 'blabla1' or Name eq 'blabla2'
だから私は動的にそれらのフィルターをたくさん追加したい... C#では、それをクエリに追加し続けることができますが、それは動的ではありません。実行時に実行したい。これを Javascript から呼び出していた場合は、URL も簡単に更新できます。
私の質問は、C# で、これらのフィルターを where 句に動的に追加する方法です。
普通の古い LINQ (linq 2 オブジェクトなど) では、このようなことができます。
var machines = new string[] { "blabla1" , "blabla2" } ;
res1.Where ( x => machines.Contains(x.Name) ).ToArray()
それは機能しますが、このようなエラーが発生するため、Odata エンドポイントに対しては機能しません。
メソッド「含む」はサポートされていません
したがって、唯一の方法は、動的に、式ツリーを編集するか、それらのフィルターを追加することだと思います。誰もそれを行う方法を知っていますか?