如何解决如何在不同节点上实现最大的linq表达式?
我有以下xml: https://pastebin.pl/view/63af9294
我应该找到最高军队参战的名字。 (是的,这是学校的工作,但我还没走近)
到目前为止,我的代码如下:
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)
,但是如您所见,我不知道如何针对2个不同的节点或任何调用的节点执行此操作。
我的意思是,我可以根据一支军队的规模加入攻击者或防御者,但不能同时加入他们两者,除非我使用2次加入,但我想这样做可以更轻松,更轻松。我不想编写代码,只需要一些提示。
解决方法
如果我正确理解了您的需求,我会这样做:
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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。