在此查询中:
var test = db.table.Where(x=>x.id == x).Where(x=>x.name == name).ToList();
在SQL语言中使用AND或OR是一样的吗?
答案 0 :(得分:5)
和
但你可以使用
和强>
var test = db.table.Where(x=>x.id == x && x.name == name).ToList();
或强>
var test = db.table.Where(x=>x.id == x || x.name == name).ToList();
答案 1 :(得分:1)
这与分离操作相同:
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
答案 2 :(得分: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-sm几乎相同:
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相同。然而,恕我直言,使用&amp;&amp;运算符优于链接多个.Where()调用。如果在SQL中不能有多个WHERE子句,则不应该在ORM中链接多个.Where()子句。