XML LINQ 匹配麻烦

问题描述 投票:0回答:1

XML:

   <DLC>
        <ObjectClass>RVM_GWR_Class166_DMSL_C</ObjectClass>
        <ShortName>Class166</ShortName>
    </DLC>
    <DLC>
        <ObjectClass>RVM_BR_Class170_DMCL_W_C</ObjectClass>
        <ShortName>Class170</ShortName>
    </DLC>

之前的代码

var values = xml.Descendants("DLC")
       .Where(i => i.Element("ObjectClass").Value == locoName)
      .Select(DLC => new
      {
          ShortName = (string)DLC.Element("ShortName"),
          DisplayName = (string)DLC.Element("DisplayName"),
      });

目前,代码的工作方式是查看 locoName 字符串是否与 ObjectClass xml 元素匹配。

但我真正需要做的是这样的:

.Where(locoName.Contains(i => i.Element("ShortName").Value))

以上内容无法编译,原因是: 无法将 lambda 表达式转换为“string”类型,因为它不是委托类型

我需要在 locoName 字符串包含“ShortName”XML 元素的位置进行匹配。

locoName 将会是这样的:

RVM_GWR_Class166_Z_ABC123
即;
Class166
部分将匹配。

我不太清楚如何在 LINQ 中做到这一点。

c# xml linq
1个回答
0
投票

您的

.Where
表达不正确。应该是:

.Where(x => locoName.Contains(x.Element("ShortName").Value))

检查

locoName
包含
ShortName
属性值。

var values = xml.Descendants("DLC")
          .Where(x => locoName.Contains(x.Element("ShortName").Value))
          .Select(DLC => new
          {
              ShortName = (string)DLC.Element("ShortName"),
              DisplayName = (string)DLC.Element("DisplayName"),
          });
© www.soinside.com 2019 - 2024. All rights reserved.