在我的日常生活中,我写了大量的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;
那么,除了语法以外,真的有区别吗?如果是这样,首选样式是什么,为什么?
第二个会更有效,因为它只有一个谓词可以对集合中的每个项目进行评估,就像第一个一样,它将第一个谓词首先应用于所有项目,结果(此时缩小了范围)是用于第二个谓词,依此类推。每次通过都会缩小结果范围,但仍然涉及多次通过。
同样,仅当您对谓词进行“与”运算时,链接(第一种方法)才有效。这样的事情x.Age == 10 || x.Fat == true不适用于您的第一种方法。
x.Age == 10 || x.Fat == true