2009-05-19 113 views
0

Linq新手,试图查询XDocument。 我想要某些属性等于两个值之一的元素。Linq-to-XML:查询清理

寻找如何精简这个查询建议:

query = from xElem in doc.Descendants(StringLiterals._streamNodeName)
where ((0 == xElem.Attribute(StringLiterals._typeAttributeName).Value.CompareTo(StringLiterals._sWorkspace)) ||
(0 == xElem.Attribute(StringLiterals._typeAttributeName).Value.CompareTo(StringLiterals._sNormal)))
select new AccuRevXmlElement
{
_location = xElem.Attribute(StringLiterals._nameAttributeName).Value,
_streamNumber = xElem.Attribute(StringLiterals._streamNumberAttributeName).Value
};

感谢您的任何想法。

回答

0

其实你都相当顺利进行,但您可以简化它一点点(未经测试):

from xElem in doc.Descendants(StringLiterals._streamNodeName) 
let typeAttributeValue = xElem.Attribute(StringLiterals._typeAttributeName).Value 
where typeAttributeValue == StringLiterals._sW... || 
     typeAttributeValue == StringLiterals._sNormal 
select new AccuRevXmlElement 
{ 
    _location = xElem.Attribute(StringLiterals._nameAttributeName).Value, 
    _streamNumber = 
     xElem.Attribute(StringLiterals._streamNumberAttributeName).Value 
}; 

的主要区别是let关键字,介绍在查询的一个新的变量,事实上,你可以比较使用==运算符的字符串,因为System.String实现此运算符。

+0

好得多,我了解了let关键字... 'let'的行为如同'var',变量从rhs中获取其类型吗? 感谢您的回复。 – Number8 2009-05-19 21:27:51