2016-07-27 12 views
-6

Linq - Where()。()はANDかORですか?このクエリで

var test = db.table.Where(x=>x.id == x).Where(x=>x.name == name).ToList(); 

それは使用しての同じANDまたはOR SQL言語でありますか?

+6

試したときに何が起こりましたか? –

+4

これはANDになります – Fredou

+2

リストから要素の半分をフィルタリングして、*結果リスト*を見ると、フィルタリングされた要素のうちどれだけがフィルタリングされたリスト内にありますか? a)ゼロb)なしc)何もないd)若干の小さなものがターンスタイルの下で忍び寄るかもしれない? –

答えて

0

これは、分離操作を行うのと同じです:

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

5

として機能し。

しかし、あなたは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(); 
1

を使用することができ、私は私のデータベースのいずれかに対して、次の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()句を連結してはいけません。

関連する問題