对不起,我已经搜索了十几个相关帖子,但没有找到我需要的内容......
我想要返回这样的对象:
((Status == 1 || Status == 2) && Value = 'Green')
当然,我无法在Linq中使用括号,因为我可以在SQL中使用括号。我尝试过以下方法:
list.Where(x => x.Status == 1 || x.Status == 2)
.Where(x => x.Value == 'Green')
// or...
list.Where(x => x.Value == 'Green')
.Any(x => x.Status == 1 || x.Status == 2)
// or...
list.Where(x => x.Status == 1 || x.Status == 2)
.Any(x => x.Value == 'Green')
(或其他多种变体)
是否有一种方法"正确"比另一个?
虽然我可以从中扼杀一些结果,但我有两个主要问题:
答案 0 :(得分:0)
你的表达应该有效:
.Where(x => (x.Status == 1 || x.Status == 2) && x.Value = 'Green')
备选方案清单中的第一个表达,即
list.Where(x => x.Status == 1 || x.Status == 2)
.Where(x => x.Value == 'Green')
是它的逻辑等价物。当LINQ转换为某些RDBMS时,这两种方法会产生等效的SQL。当在内存中使用LINQ时,两个Where
子句一个接一个地执行,但总体结果是相同的。
备选方案#2和#3不相同,因为Any(...)
会产生true
或false
,具体取决于结果中是否存在与其谓词匹配的记录。