例如
最初:
var query = A.Where(x=>criteriaA(x.item2).Where(x=>criteriaB(x.item2))
.Where(x=>criteriaC(x.item2))).Select(x=>x.item2);
如果:
var B = A.Select(x=>x.item2)
var query = B.Where(x=>criteriaA(x)
.Where(x=>criteriaB(x)).Where(x=>criteriaC(x)));
答案 0 :(得分:3)
没关系 -
怎么样?var query = A.Select(x=>x.item2)
.Where(item2=> criteriaA(item2)
&& criteriaB(item2)
&& criteriaC(item2));
答案 1 :(得分:1)
没有什么区别,应该有类似的性能特征。我还检查了linq pad,因此linq to SQL的结果SQL是相同的
您可以使用
进一步缩短查询var B = A.Select(x=>x.item2)
var query = B.Where(x=>criteriaA(x) && criteriaB(x) && criteriaC(c));
或
var B = A.Select(x=>x.item2)
var query = B.Where(criteriaA).Where(criteriaB).Where(criteriaC);
答案 2 :(得分:0)
它们产生相同的结果,我希望它们具有非常相似的性能特征。第二个重复少一点,所以我更喜欢那个。您甚至可以将其进一步缩短为:
var query = A.Select(x=>x.item2)
.Where(criteriaA).Where(criteriaB).Where(criteriaC);
或者,通过折叠所有谓词:
var query = A.Select(x=>x.item2)
.Where(x => criteriaA(x) && criteriaB (x) && criteriaC(x));
答案 3 :(得分:0)
Linq查询可以用多种方式编写,但我更喜欢让它们尽可能可读。
我更喜欢这样的东西:
var query = from x in A
where criteriaA(x) && criteriaB(x) && criteriaC(x)
select x;