根据keyc#合并两个列表我有课程奖励,每场比赛我保留用户资金。我有两个列表需要链接。我在下面写下样本列表和期望的结果。publicclassReward{publicintGame{get;放;}publicintUser{得到;放;}publicintMoney{得到;放;}publicRewardMerge(Rewardp){returnnewReward{Game=this.Game,User=this.User,Money=this.Money+p.Money};}}IListlist1=newList();list1.Add(新奖励{游戏=1,用户=1,金钱=10});list1.Add(newReward{Game=1,User=2,Money=20});list1.Add(newReward{Game=1,User=3,Money=30});IListlist2=newList();list2.Add(newReward{Game=2,User=1,Money=15});list2.Add(newReward{Game=2,User=2,Money=25});list2.Add(newReward{Game=2,User=4,Money=35});结果列表应该是UserMoney125245330435我尝试IListlistConcat=list1.Concat(list2).GroupBy(u=>u.User).Select(???).ToList();但是怎么办?你在GroupBy的正确轨道上,这应该完成这项工作:IEnumerableresult=fromrinlist1.Concat(list2)grouprbyr.UserintogroupedRewardsselectnewReward{Game=0,//whatgametouse?用户=组pedRewards.Key,Money=groupedRewards.Sum(r=>r.Money)};编辑:与lambda表达式相同:IEnumerableresult=list1.Concat(list2).GroupBy(u=>u.User).Select(g=>newReward{Game=0,//要使用什么游戏?User=g.键,Money=g.Sum(r=>r.Money)});它不漂亮,但它可以工作varlistConcat=list1.Concat(list2).GroupBy(u=>u.User).Select(rewards=>newReward{User=rewards.Key,Money=rewards.Select(reward=>reward.Money).Sum()}).ToList();使用.GroupBy,你会得到一个IGrouping列表,所以选择是这样的:IEnumerablelistConcat=list1.Concat(list2).GroupBy(x=>x.User).Select(x=>newReward{User=x.Key,Money=x.Sum(y=>y.Money)});我认为接近您正在寻找的答案看起来像这样:varcatList=list1.Concat(list2).GroupBy(x=>x.User).Select(y=>newReward{Game=0,Money=y.Sum(z=>z.Money),User=y.Key}).ToList();至于使用哪个游戏,您可以考虑匿名选择(即.Select(new{Money=y.Sum(z=>z.Money),User=y.Key})这将为您提供一个匿名类型你想使用的信息。但是,如果你想从方法中删除它,最好的做法是给它一个类型,或者只理解游戏0是你所有游戏的超集。IListlistConcat=list1.Concat(list2).GroupBy(person=>person.User).Select(group=>group.Aggregate((rewardone,rewardtwo)=>rewardone.Merge(rewardtwo))).ToList();换行:returnnewReward{Game=this.Game,User=this.User,Money=this.Money+p.User到上面就是C#学习教程:根据keyc#mergethetwoliststoshare全部内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注—returnnewReward{Game=this.Game,User=this.User,Money=this.Money+p.金钱代位,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
