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 中做到这一点。
您的
.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"),
});