私は構造ifsを持っています:
if()
{
query = query.Where(....)
}
if()
{
query = query.Where(....)
}
これらの 2 つのテストは連携して動作し、互いに上書きしないのでしょうか?
これらの 2 つのテストは連携して動作し、互いに上書きしないのでしょうか?
コードは ( if()
s の結果に応じて) クエリをチェーンします。
最終的な結果は、すべて.Where(...)
の がソースに適用されることです。
クエリ式を連鎖できるはずです。
query = query.Where(....).Where(....);
述語の作成にある程度の柔軟性が必要な場合は、LinqKitをお勧めします。このライブラリを使用すると、Where
句を動的に構築して、たとえば次のように取得できます。
if(condition)
{
predicate.And(something);
}
if(otherCondition)
{
predicate.Or(somethingElse);
}
var result = source.Where(predicate);
Expression
Linqで実際に使用されているクラスに基づいた、非常に理解しやすいオープンソースコードがあります。
結果が必要な場合にのみ計算されることも注目に値します。そのため、Linq2SQL の条件を作成することは良い解決策です。
var flg1 = cond1 == null? true : cond1;
var flg2 = cond2 == null? true : cond2;
var result = query.Where(flg1 && flg2)
DynamicQuery ライブラリを使用することもできます。次に、次のように使用できます
query.Where("field1=1 and field2=2");