Linq-to-XML:查询清理

时间:2009-05-19 21:11:20

标签: linq-to-xml

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
};

感谢任何想法。

1 个答案:

答案 0 :(得分: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实现了此运算符。