2011-08-26 60 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; 
相關問題