2016-07-27 40 views
-6

在此查詢:Linq - Where()。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過濾列表中,因此它作爲一個與

5

和。

但是你可以使用

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

使用LINQPad,我跑到下面的LINQ表達對我的數據庫之一:

Personnels.Where(x => x.LastName == "Doe").Where(x => x.FirstName == "John")

這導致下列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) 

哪個是相當多的由該LINQ表達式產生的相同的T-SQL:

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是一樣的。恕我直言,但是,使用& &運算符比鏈接多個.Where()調用要好。如果在SQL中不能有多個WHERE子句,則不應該在ORM中鏈接多個.Where()子句。