简体   繁体   中英

Linq to XML, select query with where condition

This is my XML content:

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

I want to select value of 'NomValide' when i have 'NomEquivalent'.

For example :

(select 'NomValide' where 'NomEquivalent' = "Engin inconnu") will return Engin_inconnu.

(select 'NomValide' where 'NomEquivalent' = "DRSC_6.150") will return DRSC_6150.

HOW CAN I ACHIEVE THIS ONE ?

THANKS IN ADVANCE..

If you expect only one result then the following should work:

string 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>";

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();

If you expect more than one results:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM