2013-07-02 47 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”,在这种情况下,单个文档可能不是他想要的,这里的第一条评论可能不适用。其他建议仍然有效。 –