2009-05-19 10 views
0

Linqに新しく、XDocumentをクエリしようとしました。 特定の属性が2つの値のいずれかと等しい要素が必要です。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

+0

はい、varのように動作します –

関連する問題