使用 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 => 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 => 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 类型列中查找最大值