0

是否可以将此 Linq to XML 语句更改为已编译的查询?

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

我用了这个方法:Msdn

如果我只有一个Where条件,这很有效。那么,如何创建具有 2 个Where条件的编译查询?

4

2 回答 2

1

这已经是一个编译查询。

引用 MSDN:

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

于 2013-07-02T11:15:16.263 回答
1

您为什么要编译 LINQ to XML 查询超出编译器的功能?您是否因为大型 XML 结构而遇到性能问题?如果是这样,请考虑改为查看XStreamingElement实现。

此外,您可能需要考虑在查询中使用 .First 或 .FirstOrDefault 而不是 Where 来缩短查询。在您的查询中,您必须遍历整个图表。使用 First 方法,一旦到达第一个有效匹配项,您就会停止评估。当然,如果您确实想要一个集合,那么 .Where 是完全有效的。

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

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
于 2013-07-02T17:12:58.267 回答