添加select以缩短Linq查询会不好做?

时间:2011-08-26 11:38:31

标签: c# linq

例如

最初:

 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)));

4 个答案:

答案 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;
相关问题