根据键c#合并两个列表

6 c# merge list

我有课程奖励,我保持每场比赛的用户资金.我有两个列表,我需要联系.我在下面写下样本列表和所需的结果.

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)

但怎么样?

Ale*_*ini 5

您在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)