我有课程奖励,我保持每场比赛的用户资金.我有两个列表,我需要联系.我在下面写下样本列表和所需的结果.
public class Reward
{
public int Game { get; set; }
public int User { get; set; }
public int Money { get; set; }
public Reward Merge(Reward p)
{
return new Reward { Game = this.Game, User = this.User, Money = this.Money + p.Money};
}
}
IList<Reward> list1 = new List<Reward>();
list1.Add(new Reward {Game = 1, User = 1, Money = 10});
list1.Add(new Reward { Game = 1, User = 2, Money = 20 });
list1.Add(new Reward { Game = 1, User = 3, Money = 30 });
IList<Reward> list2 = new List<Reward>();
list2.Add(new Reward { Game = 2, User = 1, Money = 15 });
list2.Add(new Reward { Game = 2, User = 2, Money = 25 });
list2.Add(new Reward { Game = 2, User = 4, Money = 35 });
Run Code Online (Sandbox Code Playgroud)
结果列表应该是
User Money
1 25
2 45
3 30
4 35
Run Code Online (Sandbox Code Playgroud)
我试试
IList<Reward> listConcat = list1.Concat(list2)
.GroupBy(u=> u.User)
.Select(???)
.ToList();
Run Code Online (Sandbox Code Playgroud)
但怎么样?
您在GroupBy上走的是正确的路,这应该可以完成工作:
IEnumerable<Reward> result =
from r in list1.Concat(list2)
group r by r.User into groupedRewards
select new Reward
{
Game = 0, //what game to use?
User = groupedRewards.Key,
Money = groupedRewards.Sum(r => r.Money)
};
Run Code Online (Sandbox Code Playgroud)
编辑:与lambda表达式相同:
IEnumerable<Reward> result = list1.Concat(list2)
.GroupBy(u => u.User)
.Select(g => new Reward
{
Game = 0, //what game to use?
User = g.Key,
Money = g.Sum(r => r.Money)
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2218 次 |
| 最近记录: |