使用 LINQ 从 XML 获取三个输入中的最大属性值

Posted

技术标签:

【中文标题】使用 LINQ 从 XML 获取三个输入中的最大属性值【英文标题】:Get max attribute value in three input from XML using LINQ 【发布时间】:2021-08-10 09:14:03 【问题描述】:

以下是示例 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();

【问题讨论】:

这个? var finalInfo = info.Select(x =&gt; Math.Max(x.Element("DOBMatch ").Value, x.Element("DOBScore").Value, x.Element("IDScore").Value)).Max(); @Klamsi Math.Max - 将“MAx”更改为“最大量级”时出现错误。 啊,你是对的,那么你需要new myType[] ... .Max() 而不是Math.Max 我的类型[]能不能加完整码 var finalInfo = info.Select(x =&gt; new[] x.Element("DOBMatch ").Value, x.Element("DOBScore").Value, x.Element("IDScore").Value .Max()).Max(); 【参考方案1】:

首先,您需要将值转换为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();

【讨论】:

【参考方案2】:

var finalInfo = info.Elements().Max(x => Convert.ToInt32(x.Value));

【讨论】:

以上是关于使用 LINQ 从 XML 获取三个输入中的最大属性值的主要内容,如果未能解决你的问题,请参考以下文章

Linq - 从 SQL Server 中的 nvarchar 类型列中查找最大值

在 C# 中使用 Linq 从 XML 获取属性和属性

使用 LINQ 获取连接表中的最大计数

未使用 MVC 从 Json Result 获取 Ajax 成功方法中的 LINQ 连接查询结果,但结果显示正确

LINQ to DataSet

如何从 xml/scxml 获取属性