:Linq - Where()。()はANDかORですか?このクエリで
var test = db.table.Where(x=>x.id == x).Where(x=>x.name == name).ToList();
それは使用しての同じANDまたはOR SQL言語でありますか?
:Linq - Where()。()はANDかORですか?このクエリで
var test = db.table.Where(x=>x.id == x).Where(x=>x.name == name).ToList();
それは使用しての同じANDまたはOR SQL言語でありますか?
これは、分離操作を行うのと同じです:
var numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var biggerThanThree = numbers.Where(x => x > 3); // [4, 5, 6, 7, 8, 9, 10]
var smallerThanSeven = biggerThanThree.Where(x => x < 7); // [4, 5, 6]
は、私は物事をシンプルにするために、ここで怠惰な実行につもりはありません。
しかし、二.Where
は、すでに最初の.Where
によってフィルタリングされたリスト上で動作し、それは、AND
として機能し。
しかし、あなたはLINQPadを使用して
と
var test = db.table.Where(x=>x.id == x && x.name == name).ToList();
OR
var test = db.table.Where(x=>x.id == x || x.name == name).ToList();
を使用することができ、私は私のデータベースのいずれかに対して、次のLINQの式走っ:
をかなりこのLINQの式で生成された同じT-SQLで-- Region Parameters
DECLARE @p0 VarChar(1000) = 'John'
DECLARE @p1 VarChar(1000) = 'Doe'
-- EndRegion
SELECT [t0].[FirstName], [t0].[LastName]
FROM [Personnel] AS [t0]
WHERE ([t0].[FirstName] = @p0) AND ([t0].[LastName] = @p1)
:以下T-SQLで結果
Personnels.Where(x => x.LastName == "Doe").Where(x => x.FirstName == "John")
Personnels.Where(x => x.LastName == "Doe" && x.FirstName == "John")
結果:
-- Region Parameters
DECLARE @p0 VarChar(1000) = 'Doe'
DECLARE @p1 VarChar(1000) = 'John'
-- EndRegion
SELECT [t0].[FirstName], [t0].[LastName]
FROM [Personnel] AS [t0]
WHERE ([t0].[LastName] = @p0) AND ([t0].[FirstName] = @p1)
はい、少なくとも単純なケースでは、ANDと同じです。しかし、IMHOは、& &演算子を使用する方が、複数の.Where()呼び出しを連鎖させるよりも優れています。 SQLで複数のWHERE句を使用できない場合は、ORMに複数の.Where()句を連結してはいけません。
試したときに何が起こりましたか? –
これはANDになります – Fredou
リストから要素の半分をフィルタリングして、*結果リスト*を見ると、フィルタリングされた要素のうちどれだけがフィルタリングされたリスト内にありますか? a)ゼロb)なしc)何もないd)若干の小さなものがターンスタイルの下で忍び寄るかもしれない? –