在此查詢:Linq - Where()。Where()是AND還是OR?
var test = db.table.Where(x=>x.id == x).Where(x=>x.name == name).ToList();
這是相同的使用AND或OR SQL語言?
在此查詢:Linq - Where()。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
過濾列表中,因此它作爲一個與
和。
但是你可以使用
和
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();
使用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()子句。
當您嘗試時發生了什麼? –
這將是AND – Fredou
如果你從列表中過濾了一半元素,然後查看*結果列表*,那麼你期望在過濾列表中找到多少個過濾掉的元素? a)零b)沒有c)沒有任何d)也許有些小孩在旋轉門下面偷偷摸摸? –