一尘不染

正确的Linq where子句

c#

在我的日常生活中,我写了大量的linq,但是主要是简单的陈述。我注意到,当使用where子句时,有许多种写法,据我所知每种方法都有相同的结果。例如;

from x in Collection
  where x.Age == 10
  where x.Name == "Fido"
  where x.Fat == true
  select x;

至少就结果而言似乎与之等效:

from x in Collection
  where x.Age == 10 &&
        x.Name == "Fido" &&
        x.Fat == true
  select x;

那么,除了语法以外,真的有区别吗?如果是这样,首选样式是什么,为什么?


阅读 206

收藏
2020-05-19

共1个答案

一尘不染

第二个会更有效,因为它只有一个谓词可以对集合中的每个项目进行评估,就像第一个一样,它将第一个谓词首先应用于所有项目,结果(此时缩小了范围)是用于第二个谓词,依此类推。每次通过都会缩小结果范围,但仍然涉及多次通过。

同样,仅当您对谓词进行“与”运算时,链接(第一种方法)才有效。这样的事情x.Age == 10 || x.Fat == true不适用于您的第一种方法。

2020-05-19