Linq-to-XML: limpeza consulta

votos
0

Novo no Linq, tentando consultar um XDocument. Quero elementos onde um determinado atributo é igual a um dos dois valores.

Olhando para obter sugestões sobre como otimizar esta consulta:

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

Obrigado por todas as idéias.

Publicado 19/05/2009 em 22:11
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Na verdade você está muito bem encaminhado, mas você pode simplificar um pouco (não testado):

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

As principais diferenças são a letpalavra-chave que introduz uma nova variável dentro da consulta eo fato de que você pode comparar strings usando o ==operador já que System.Stringimplementa este operador.

Respondeu 19/05/2009 em 22:22
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more