首页 > 解决方案 > 如何使用 Linq 加入 2 个 Key 匹配和 SUM 的字符串列表

问题描述

我有两个字符串列表,它们都包含ActivityHash.Join用来查找哈希出现在两个列表中的位置,然后ActivityCompletion从第二个列表中返回

课程

public class ActivityCompletions
    {
        public string ActivityCompletion;
        public string ActivityHash;
    }

public class BungieRaids
    {
        public string ActivityName;
        public string ActivityHash;
    }

加入代码

var query = Activitys.Join(Completions, ac => ac.ActivityHash, c => c.ActivityHash, (activity,completion) => 
new {activity.ActivityHash, activity.ActivityName, completion.ActivityCompletion});

我现在可以在列表中返回ActivityName与其关联的ActivityCompletion

但是我现在已经意识到每个都ActivityHash出现了不止一次,所以我需要这些,Group然后SUMActivityCompletion

示例响应

Activityname1 = 10
Activityname1 = 7
Activityname1 = 19
Activityname2 = 5
Activityname2 = 9

预期响应

Activityname1 = 36
Activityname2 = 14

任何人都可以就我如何实现这一点提供一些帮助吗?

标签: c#linq

解决方案


您可以在每个子组中使用GroupBy然后Sum(ActivityCompletion)。例如,

var result = query.GroupBy(x=> x.ActivityHash)
                 .Select(x=> new
                         {
                           ActivityHash=x.Key, 
                           ActivityCompletion= x.Sum(c=>Convert.ToInt32(c.ActivityCompletion)),
                           ActivityName = x.Select(c=>c.ActivityName).First()
                         });

样本输入

在此处输入图像描述 在此处输入图像描述

样本输出

在此处输入图像描述


推荐阅读