何エンティティのSQLクエリについてのダイナミックで「どこ」状態?
var list = new List<Tuple<string, int, bool>>();
list.Add(new Tuple<string, int, bool>("1", 2, true));
list.Add(new Tuple<string, int, bool>("2", 4, true));
list.Add(new Tuple<string, int, bool>("3", 5, false));
var query = list.Select(x => x.GetType().GetProperties().Select((y, index) => string.Concat("o.Prop", index + 1, "=", y.GetValue(x))).Aggregate((a, b) => a + " and " + b))
.Aggregate((a, b) => string.Format("({0}) or ({1})", a, b));
var result = context.OtherTable.SqlQuery("Select * from OtherTable o where " + query).ToList();
OR ははそれだけであなたのo.Propのすべての場合に動作します、と述べwonderbellとしてあなたは(Contains
その方法を使用することができますNには文字列型がありますが、 n別のタイプを文字列にキャストするにはSqlFunctions.StringConvert
のようなものを使用してください):
var queryList = list.Select(x => x.GetType().GetProperties().ToList().OrderBy(x => x.Name).Select(y => y.GetValue(x).ToString())
.Aggregate((a, b) => a + "," + b));
var result = context.OtherTable.Where(x => queryList.Contains(x.Prop1 + "," + x.Prop2 + "," + x.Prop3))
.ToList();
タプルリストにはいくつのアイテムがありますか?それが多くない場合は、すぐに長い「OR」クエリを生成することができます。多くの場合、それらを一時変数にドロップします。テーブルを作成し、 'IN'クエリを使用してください – Carsten
@Carsten私のリストには何百ものタプルがあります。私はまだ周りを見ている。私はある種のSProcを使用する必要があるように見えます。 –
何百ものものはそれほど多くありません - 正直言って私は大規模な場所を使ってみようとしています - これがうまくいかない場合、または遅くなる場合は2番目のものを試してください – Carsten