2014-09-17 2 views
-1

Это мое содержание XML:Linq для XML, выберите запрос с условием, где

<ListEnginsMesures> 
    <EnginsESC> 
     <NomValide>Engin_inconnu</NomValide> 
     <NomEquivalents> 
     <NomEquivalent>Engin inconnu</NomEquivalent> 
     <NomEquivalent>Engininconnu</NomEquivalent> 
     </NomEquivalents> 
    </EnginsESC> 
    <EnginsESC> 
     <NomValide>DRSC_6150</NomValide> 
     <NomEquivalents> 
     <NomEquivalent>DRSC 6150</NomEquivalent> 
     <NomEquivalent>DRSC6150</NomEquivalent> 
     <NomEquivalent>DRSC6.150</NomEquivalent> 
     <NomEquivalent>DRSC_6.150</NomEquivalent> 
     </NomEquivalents> 
    </EnginsESC> 
<ListEnginsMesures> 

Я хочу, чтобы выбрать значение «NomValide», когда у меня есть «NomEquivalent».

Например:

(выберите 'NomValide', где 'NomEquivalent = "Engin белорыбицы") вернет Engin_inconnu.

(выберите «NomValide», где «NomEquivalent» = «DRSC_6.150») вернет DRSC_6150.

КАК Я ДОЛЖЕН ЭТОТ ОДИН?

Заранее спасибо ..

+1

Это всегда хорошо Идея начать с того, что у вас до сих пор - идеально в короткой, но полной программе. Затем объясните, что происходит. Я подозреваю, что вам понадобится запрос для элементов 'EnginsESC' с предложением' Where', который проверяет, имеет ли какое-либо из потомков 'NomEquivalent' значение, которое вы ищете. –

+0

Как я хочу, чтобы Джон был моим первым комментатором. Это, как говорится, нужно что-то вроде 'select Nom Valide от ListEngins, где NomEquivalents.Any()' – arviman

+0

Привет, спасибо за ваш ответ, проблема SOLVED. СПАСИБО СНОВА ... –

ответ

2

Если вы ожидаете только один результат, то должно работать:

string [email protected]"<ListEnginsMesures> 
    <EnginsESC> 
     <NomValide>Engin_inconnu</NomValide> 
     <NomEquivalents> 
     <NomEquivalent>Engin inconnu</NomEquivalent> 
     <NomEquivalent>Engininconnu</NomEquivalent> 
     </NomEquivalents> 
    </EnginsESC> 
    <EnginsESC> 
     <NomValide>DRSC_6150</NomValide> 
     <NomEquivalents> 
     <NomEquivalent>DRSC 6150</NomEquivalent> 
     <NomEquivalent>DRSC6150</NomEquivalent> 
     <NomEquivalent>DRSC6.150</NomEquivalent> 
     <NomEquivalent>DRSC_6.150</NomEquivalent> 
     </NomEquivalents> 
    </EnginsESC> 
</ListEnginsMesures>"; 

var xe = XElement.Parse(xml); 
var result = xe.Elements("EnginsESC") 
    .Where 
    (
     x=> 
     x.Element("NomEquivalents") 
      .Elements("NomEquivalent") 
      .Any(n=>(string)n=="Engin inconnu") 
    ) 
    .Select(x=>(string)x.Element("NomValide")) 
    .FirstOrDefault(); 

Если вы ожидаете более одного результата:

var results = xe.Elements("EnginsESC") 
    .Where 
    (
     x=> 
     x.Element("NomEquivalents") 
      .Elements("NomEquivalent") 
      .Any(n=>(string)n=="Engin inconnu") 
    ) 
    .Select(x=>(string)x.Element("NomValide")); 
+0

СПАСИБО ЗА ОТВЕТ, ИСПОЛНИТЕ ЭТО ОТВЕТ. УБЕДИТЕСЬ, ЧТО ВЫ ВЕРЫШНЫ МУЛЬТИ. ЧТО РЕАКТИВНОСТЬ .. –

+0

COOL ... СПАСИБО ... –

Смежные вопросы