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