Linq to XML编译查询

时间:2013-07-02 11:05:59

标签: xml linq compiled-query

是否可以将此Linq to 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条件的编译查询?

2 个答案:

答案 0 :(得分:1)

这已经是一个已编译的查询。

来自MSDN的引用:

  

LINQ to XML中的查询是静态编译的[...]。此功能内置于LINQ to XML中,因此您无需执行额外步骤即可利用它

答案 1 :(得分:1)

为什么要尝试编译LINQ to XML查询超出编译器的范围?由于XML结构较大,您是否遇到过perf问题?如果是这样,请考虑改为XStreamingElement实施。

此外,您可能需要考虑在查询中使用.First或.FirstOrDefault而不是Where来短路查询。在查询中,您必须遍历整个图形。使用First方法,一旦进入第一个有效匹配,就停止评估。当然,如果你确实想要一个系列,那么。完全有效。

第三件事与表演无关,但完全是风格。您可能需要考虑对元素和属性使用XML Literals,而不是将文字与字符串参数混合使用:

Dim myAttribute = sAttributID.ToLower()    ' Pull this out to only parse once
myxmlnodeList2 = From el In mynode.<attributwert> 
                 Where el@AttributID = myAttribute
                 And el@Verwendung = sVerwendung 
                 Select el