さまざまなタイプのデータで多くの再利用が必要なため、ジェネリックを使用しています。私の主な問題はデータのクエリです。一般的なエンティティフィールド名の動的クエリ
私は特定のプロパティの値を取得するために使用することができますpublic object GetPropertyValue(object src, string propertyName)
:
public void test<T>(int id, T type) where T : class
{
using (var ctx = myDbContext())
{
var myTbl = ctx.Set<T>();
//this line gets the primary key of the table
string key = myTbl.GetPrimaryKey(ctx);
//this is the query I want:
var myResult = myTbl.FirstOrDefault(x => x.key == id);
//let's say if key = "UserId", then (x => x.UserId == id) or something that translates to this.
}
}
も、私は次のような方法を実装している:私はこのような何かを照会する方法を探しています。
しかし、私の問題は、LINQがメソッドの問題をクエリするために.FirstOrDefault()呼び出しの中で使用できないことです。
私は現在、代わりにこのコードを使用します。
var myResult = myTbl.ToList().FirstOrDefault(x => (int)GetPropertyValue(x, key) == id);
データベース内の行数数の罰金ですが、データが将来的に成長するときには、パフォーマンスへの影響の多くを持っているであろう。
P.S:私はウンム
あなたのコードサンプルは完全に不明です。少なくとも、正しい変数名を提供してください。なぜなら、私はあなたが 'キー'変数をどこで使うのか分からないからです。 – eocron
@eocronが編集しました。 'key'変数は現在 'GetPropertyValue()'メソッドに渡されます。 –