2013-07-02 43 views
0

是否有可能將此Linq更改爲XML語句爲編譯查詢?Linq到XML編譯查詢

myxmlnodeList2 = From el In mynode.<attributwert> 
       Where el.Attribute("AttributID") = sAttributID.ToLower And el.Attribute("Verwendung") = sVerwendung 
       Select el 

我用這個方法:Msdn

這工作完全,如果我只有1個單Where條件。那麼,如何創建一個具有2 Where條件的編譯查詢呢?

回答

1

這已經是一個編譯查詢。從MSDN

報價:

查詢LINQ to XML中的靜態編譯[...]。此功能內置於LINQ to XML,因此您不必執行額外的步驟來利用它。

+0

哦沒有看到,謝謝 所以沒有辦法通過以提高性能使用靜態編譯的請求? – d1chty

1

爲什麼要編譯LINQ to XML查詢超出編譯器的範圍?由於XML結構龐大,您是否遇到了性能問題?如果是這樣,請考慮查看XStreamingElement實施。

此外,您可能需要考慮使用.First或.FirstOrDefault,而不是查詢中的Where來短路查詢。在你的查詢中,你必須遍歷整個圖。使用第一種方法,一旦你找到第一個有效的匹配,就停止評估。當然,如果你確實想要一個集合,那麼完全有效。

第三件事與性能無關,但完全是風格。您可能需要考慮使用XML文本的元素和屬性都,而不是混合的文字與字符串參數:

Dim myAttribute = sAttributID.ToLower() ' Pull this out to only parse once 
myxmlnodeList2 = From el In mynode.<attributwert> 
       Where [email protected] = myAttribute 
       And [email protected] = sVerwendung 
       Select el 
+0

我可能誤解了你的答案,但是使用'Where'並不一定會迭代整個集合。如果您在取出第一個項目後停止迭代,則迭代次數與「First」# –

+0

@DanielHilgarth True的迭代次數相同。這裏的要點是如果你不使用First,整個文檔可能會被解析。由於OP命名項目「... nodeList」,在這種情況下,單個文檔可能不是他想要的,這裏的第一條評論可能不適用。其他建議仍然有效。 –