首页 > 解决方案 > 使用 LINQ 从 XML 获取三个输入中的最大属性值

问题描述

下面是示例 xml 文件代码。我想使用 LINQ 获取 Max("Match") 值。

<?xml version="1.0" encoding="utf-8"?>
<Match>
  <DOBMatch>100</ DOBMatch >
  <DOBScore>0</ DOBScore >
  <IDScore>89</ IDScore >
</Match>

在 Match 对象中,我有三个值比较这三个属性(DOBMatch,DOBScore,IDScore)并获得最大值。

下面的代码得到一个值。

var info = document.Descendants("Match");
var finalInfo = info.Select(x => x.Element("DOBMatch ").Value).Max();

标签: c#xmllinq-to-xml

解决方案


首先,您需要将值转换为,int以便正确找到最大值。其次,您需要获得所需的三个值:

var targetNames = new[] { "DOBMatch", "DOBScore", "IDScore" }.ToHashSet();
var info = document.Descendants("Match");
var finalInfo = info.SelectMany(d => d.Elements()
                                      .Where(d => targetNames.Contains(d.Name.ToString()))
                                      .Select(d => Int32.Parse(d.Value)))
                    .Max();

推荐阅读