-7

私は構造ifsを持っています:

if()
{
  query = query.Where(....)
}

if()
{
   query = query.Where(....)
}

これらの 2 つのテストは連携して動作し、互いに上書きしないのでしょうか?

4

4 に答える 4

2

これらの 2 つのテストは連携して動作し、互いに上書きしないのでしょうか?

コードは ( if()s の結果に応じて) クエリをチェーンします。

最終的な結果は、すべて.Where(...)の がソースに適用されることです。

于 2012-10-01T09:20:56.453 に答える
1

クエリ式を連鎖できるはずです。

query = query.Where(....).Where(....);
于 2012-10-01T09:19:07.393 に答える
1

述語の作成にある程度の柔軟性が必要な場合は、LinqKitをお勧めします。このライブラリを使用すると、Where句を動的に構築して、たとえば次のように取得できます。

if(condition)
{
   predicate.And(something);
}
if(otherCondition)
{
   predicate.Or(somethingElse);
}
var result = source.Where(predicate);

ExpressionLinqで実際に使用されているクラスに基づいた、非常に理解しやすいオープンソースコードがあります。

結果が必要な場合にのみ計算されることも注目に値します。そのため、Linq2SQL の条件を作成することは良い解決策です。

于 2012-10-01T09:20:06.790 に答える
0
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");
于 2012-10-01T09:20:51.087 に答える