簡體   English   中英

這兩個XML LINQ查詢之間有什么區別?

[英]What is the difference between these 2 XML LINQ Queries?

我有以下2個LINQ查詢,但我還不太了解LINQ,所以下面的2種方法之間有什么區別?

是否存在一種方法優於另一種方法的情況?

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

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

正如達林所說,沒有區別。 我個人更喜歡第一種語法,因為您所擁有的只是查詢表達式中的單個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();

但是編譯器刪除了no-op Select(x => x) 在沒有其他子句的情況下不會執行此操作-因此from x in y select x仍然變為y.Select(x => x)

完全沒有區別。 編譯器將第二種語法轉換為第一種語法(在已編譯的程序集上與Reflector一起查看),因此實際上由您決定哪種語法最適合您。

對我來說也是一樣。 唯一的區別是,第一是使用lambda表達式編寫,第二是使用linq to xml。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM