実行時にwhere句を作成する必要がありますが、where句でORを実行する必要があります。これは可能ですか?。説明させてください..
ここに私のコード...、基本的に「filter」は列挙型のBitwiseです。そのため、filterは次の1つ以上になる可能性があります。したがって、where句を作成する必要があります...
最初にUntestedを実行した場合に想像とは別にwheresを実行し、0レコードを返す場合、テスト済みのwhereを実行できません。
以下にいくつかの擬似コードを入れます:-)
string myWhere = "";
if ((filter & Filters.Tested) == Filters.Tested)
{
if (myWhere != "" ) myWhere =myWhere + "||";
myWhere = myWhere " Status == "Tested";
}
if ((filter & Filters.Untested) == Filters.Untested)
{
if (myWhere != "" ) myWhere =myWhere + "||";
myWhere = myWhere " Status == "Untested";
}
if ((filter & Filters.Failed) == Filters.Failed)
{
if (myWhere != "" ) myWhere =myWhere + "||";
myWhere = myWhere " Status == "Failed";
}
// dataApplications = a List of items that include Tested,Failed and Untested.
// dataApplciation.Where ( myWhere) --- Confused here!
これは可能ですか
多くの "IF"を含めたくありません。これは、多くの組み合わせがあるためです。つまり、フィルターなし、フィルター=テスト済みのみ、フィルター=未テストおよびテスト済み...などなどです。
どんなアイデアも本当に感謝しています
ありがとう
var statusTexts = new List<string>(); // Add desired status texts
dataApplication.Where(item =>
statusTexts.Any(status => item.Status == status))
これがあれば:
IEnumerable<MyType> res = from p in myquery select p;
を定義できます
var conditions = new List<Func<MyType, bool>>();
conditions.Add(p => p.PropertyOne == 1);
conditions.Add(p => p.PropertyTwo == 2);
res = res.Where(p => conditions.Any(q => q(p)));
そして今、匿名オブジェクトのFuncのリストを作成するトリック(そして、匿名オブジェクトのタイプを「抽出」するように簡単に変更できます)
static List<Func<T, bool>> MakeList<T>(IEnumerable<T> elements)
{
return new List<Func<T, bool>>();
}
LINQクエリの結果を渡すことで呼び出します。そう
var res = from p in elements select new { Id = p.Id, Val = p.Value };
var conditions = MakeList(res);