LINQ to Entities将逻辑运算分组到Where中

时间:2013-06-20 05:32:40

标签: linq entity-framework

我正在尝试执行以下linq查询,它似乎忽略了操作顺序。 (括号第一)

var result = _repo.Transactions.Where(t => 
                      t.DateEntered > EntityFunctions.AddDays(DateTime.Now, -7) 
                      && ( t.TranDesc != "BALANCE FORWARD" && t.Withdrawl == 0 && t.Deposit == 0 ) ); 

这是生成的where子句:

WHERE ([Extent1].[dateentered] > (DATEADD (day, -7, SysDateTime()))) 
AND (N'BALANCE     FORWARD' <> [Extent1].[TranDesc]) 
AND (cast(0 as decimal(18)) = [Extent1].[Withdrawl]) 
AND (cast(0 as decimal(18)) = [Extent1].[Deposit])

任何想法我做错了什么?

编辑: 这实际上是我想要的,它解决了我的问题。只是没想到这一切。感谢。

var result = _repo.Transactions.Where(t => 
                      t.dateentered > EntityFunctions.AddDays(DateTime.Now, -7) 
                      && ((t.TranDesc == "BALANCE FORWARD" && (t.Withdrawl != 0 || t.Deposit != 0))
                      || (t.TranDesc != "BALANCE FORWARD")));

1 个答案:

答案 0 :(得分:2)

a && (b && c && d)a && b && c && d之间没有区别,这就是为什么生成的SQL中的括号与LINQ查询中的括号不完全相同的原因。但最后这些查询之间没有区别。