2010-03-08 65 views
1

我有两个以下的LINQ查询,我还没有完全了解LINQ,所以下面两种方法有什么区别?这2个XML LINQ查询有什么区别?

有没有一种方法比另一种更好?

ChequeDocument.Descendants("ERRORS").Where(x=>(string)x.Attribute("D") == "").Count(); 

    (from x in ChequeDocument.Descendants("ERRORS") where 
          (string)x.Attribute("D") == "" 
          select x).Count()) 

回答

2

根本没有区别。编译器将第二种语法转换为第一种语法(在编译后的程序集中查看Reflector),所以真正由您决定哪种语法最适合您。

3

正如Darin所说,没有区别。我个人更喜欢第一种语法,因为你在查询表达式中只有一个where子句。需要注意的是第一语法更具可读性为:

var query = ChequeDocument.Descendants("ERRORS") 
          .Where(x=>(string)x.Attribute("D") == "") 
          .Count(); 

另外请注意,这是展示查询表达式的一个特例。所述第二语法是最初翻译成:

var query = ChequeDocument.Descendants("ERRORS") 
          .Where(x=>(string)x.Attribute("D") == "") 
          .Select(x => x) 
          .Count(); 

但是编译器除去无操作Select(x => x)。它不会在没有其他条款的情况下这样做 - 所以from x in y select x仍然变成y.Select(x => x)

0

对我来说也是一样。唯一不同的是,1st是用lambda表达式写的,其次是linq到xml。