Linq到XML,选择带有where条件的查询

本文关键字:where 条件 查询 XML 选择 Linq | 更新日期: 2023-09-27 18:22:08

这是我的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>

当我有"NomEquivalent"时,我想选择"NomValide"的值。

例如:

(选择"NomValide",其中"NomEquivalent"="Engine-inconnu")将返回Engine_inconnu。

(选择"NomValide",其中"NomEquivalent"="DRSC_6.150")将返回DRSC_6150。

我怎样才能做到这一点?

提前谢谢。。

Linq到XML,选择带有where条件的查询

如果您只期望一个结果,那么以下方法应该有效:

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

如果你期望不止一个结果:

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