C# 如何在不同节点中实现最大值的linq表达式?

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

我有以下xml:

我应该找到最高军队战斗的地方的名字。 (是的,这是一个学校作业,但我不会再靠近了)

到目前为止,我的代码如下所示:

        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();