2011-08-26 21 views
0

例如添加select来缩短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))); 
+0

这可能进一步甚至shortern到'B.Where(criteriaA)。凡(criteriaB)。凡(criteriaC)' –

回答

3

它的罚款 - 怎么样

var query = A.Select(x=>x.item2) 
      .Where(item2=> criteriaA(item2) 
          && criteriaB(item2) 
          && criteriaC(item2)); 
+1

+1更好,更加清晰你尽管我可能会用“item”替换where子句中的x,以使其更加清晰 – Paolo

+0

好评 - 将立即执行此操作 – Carsten

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

会有差别不大并应具有类似的性能特点。我也检查了LINQ垫和的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); 
0

LINQ查询可以写成在许多方面,但我更愿意让它们尽可能可读。

我宁愿是这样的:

var query = from x in A 
      where criteriaA(x) && criteriaB(x) && criteriaC(x) 
      select x; 
相关问题