式ツリーを構築して、問題のオブジェクトを照会できます。
public T GetSingleObject<T>(int someValue) {
MyEntities db = new MyEntities();
var result = db.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name + "s"));
var param = Expression.Parameter(typeof(T));
var lambda = Expression.Lambda<Func<T, bool>>(
Expression.Equal(
Expression.Property(param, "WhateverPropertyYourComparing"),
Expression.Constant(someValue)),
param);
return result.SingleOrDefault(lambda);
}
または、オブジェクトのコレクションが必要な場合
public IEnumerable<T> GetResultCollection<T>(int someValue) {
MyEntities db = new MyEntities();
var result = db.CreateQuery<T>(String.Format("[{0}]", typeof(T).Name + "s"));
var param = Expression.Parameter(typeof(T));
var lambda = Expression.Lambda<Func<T, bool>>(
Expression.Equal(
Expression.Property(param, "WhateverPropertyYourComparing"),
Expression.Constant(someValue)),
param);
return result.Where(lambda);
}
もちろん、必要なクエリが非常に長い場合、これは手に負えなくなる可能性があり、Justin Morgan が提案したように、部分クラスを使用して必要なインターフェイスを追加することを検討する必要があります。
このメソッドは、ObjectSet コレクションがオブジェクトと同じ名前に「s」を加えたもの、つまり「Invoice」から「Invoices」であると想定していることに注意してください。そうでない場合、つまり「Person」から「People」の場合、System.Data.Entity.Design.PluralizationServices.PluralizationService を使用して適切な名前を取得できます。