2009-05-19 9 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 키워드에 대해 훨씬 더 잘 알았습니다 ... 변수가 'rhs'에서 해당 유형을 가져 오는 'var'처럼 '실행'하시겠습니까? 답장을 보내 주셔서 감사합니다. – Number8

+0

예, var와 같이 작동합니다. –