繁体   English   中英

Linq to XML,选择带条件的查询

[英]Linq to XML, select query with where condition

这是我的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'=“ Engin inconnu”)将返回Engin_inconnu。

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

我该如何做到这一点?

提前致谢..

如果您只期望一个结果,那么以下应该起作用:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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