Linq新手,尝试查询XDocument。我想要某个属性等于两个值中的一个的元素。
正在寻找有关如何简化此查询的建议:
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
};
谢谢你的点子。
发布于 2009-05-19 21:22:06
实际上你已经做得很好了,但是你可以稍微简化一下(未经测试):
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实现了这个运算符。
https://stackoverflow.com/questions/885051
复制相似问题