C# 如何在不同节点中实现最大值的linq表达式?
我有以下xml: 我应该找到最高军队战斗的地方的名字。 (是的,这是一个学校作业,但我不会再靠近了) 到目前为止,我的代码如下所示:C# 如何在不同节点中实现最大值的linq表达式?,c#,xml,linq,C#,Xml,Linq,我有以下xml: 我应该找到最高军队战斗的地方的名字。 (是的,这是一个学校作业,但我不会再靠近了) 到目前为止,我的代码如下所示: var q10 = (from a in (from x in xdoc.Descendants("size") select x) join b in (from y in xdoc.Des
var q10 = (from a in
(from x in xdoc.Descendants("size") select x)
join b in
(from y in xdoc.Descendants("battle") select y)
on a equals b.Element("attacker").Element("size")
select new
{
size = a.Value,
battle = b.Element("name")
});
我试着先得到最高的数字,然后按大小加入每一场战斗,然后使用
.Max(x=>x.size)
,但正如您所见,我不知道如何为两个不同的节点或任何调用的节点执行此操作。
我的意思是,我可以根据一支军队的规模加入攻击方或防御方,但不能同时加入这两个阵营,除非我使用两个阵营,但我想这样做会更容易、更好。我不想写代码,只需要一些提示。如果我正确理解您的需要,我会这样做:
var battle = xDoc.Descendants("battle")
.OrderByDescending(b => GetMaxBattleArmySize(b))
.First();
其中GetMaxArmySize
是
private static int GetMaxBattleArmySize(XElement battle)
{
XElement attacker = battle.Element("attacker");
XElement defender = battle.Element("defender");
var attackerSizeEl = attacker.Element("size");
var defenderSizeEl = defender.Element("size");
var attackerSize = attackerSizeEl == null
? 0
: int.Parse(attackerSizeEl.Value);
var defenderSize = defenderSizeEl == null
? 0
: int.Parse(defenderSizeEl.Value);
return Math.Max(attackerSize, defenderSize);
}
如果对对象进行排序和分组,对象将保持有序。因此,在结束括号后添加到查询末尾:.OrderByDescending(x=>x.size).GroupBy(x=>x.battle).Select(x=>x.First()).ToList();