WCF Data Services/Odata クライアント ライブラリを使用しています。Northwind サンプル OData ストア ( http://services.odata.org/Northwind/Northwind.svc/ ) をターゲットにすると、次の手順で製品を取得できます。数量が 50 より大きい:
var r = context.Products.Where(w=> w.UnitsInStock > 50)
私の質問は、この操作を実行する必要がある汎用クラスが必要だとしますが、取得するエンティティ (この場合は製品) と同じエンティティに対する条件 (UnitsInStock > 50) をハードコーディングする代わりに、エンティティ オブジェクト/名前と Func としての条件。私が望むのは、架空のGetEntityType関数が提供された T からエンティティを推測する次のクラスのようなものを持つことでしたが、残念ながら GetEntityType は存在せず、同じタスクを達成する方法が見つかりませんでした:
public class OdataTesting<T>
{
...
public IQueryable<T> ReturnItem(Func<T, bool> selector)
{
return context.GetEntityType<T>().Where(w=> selector(w));
}
...
}
アップデート:
次のように使用できる CreateQuery メソッドを見つけました。
return context.CreateQuery<T>("Products").Where(w=> selector(w));
しかし...
1. データ型に関連付けられた文字列エンティティ名を取得する方法が見つかりません。Tからプログラムで取得する方法はありますか?
2. URI ジェネレーターは、関数を使用してエンティティをフィルター処理する場合に問題があるようです。そのため、代替手段についてさらに調査する必要があります。提案は大歓迎です
更新 2: エンティティ文字列名は、リフレクションを使用して取得できます。
string s = ((global::System.Data.Services.Common.EntitySetAttribute)(typeof(Product).GetCustomAttributes(typeof(global::System.Data.Services.Common.EntitySetAttribute), true)[0])).EntitySet;
それを行うための別の推奨される方法があれば、共有してください。
サービスからエンティティを取得する条件を動的に提供する方法をまだ探しています。