【问题标题】:group list a join with list b and get the average of items in list b组列表 a 与列表 b 连接并获取列表 b 中项目的平均值
【发布时间】:2014-07-01 10:35:15
【问题描述】:

我有两个列表列表 A 和列表 B,它们可以在一个公共属性 (Id) 上加入,我想要做的是在它的一个属性 (OrgName) 上对列表 A 进行分组,将它与列表 B 加入. 列表 B 包含对一组问题的所有答案。我想获得该组织每个问题的平均分数。

任何建议将不胜感激。

如果它使 List A 更容易,它是一个 Submission 对象的 List。其中提交具有诸如 Id、名字、姓氏、公司、电子邮件等成员,并且还包含类型为答案对象列表的成员答案。 answer对象有Id、question、answer等成员。

我所追求的是按公司对列表进行分组,然后获得该公司每个问题的平均分数(答案)。

【问题讨论】:

  • 您能否展示您的类的外观并举例输入和输出?

标签: linq list lambda


【解决方案1】:

我创建了这两个对象来测试我的答案。

public class ObjA
{
    public string OrgName { get; set; }
    public string Name { get; set; }
    public int Id { get; set; }
}

public class ObjB
{
    public int QuestionId { get; set; }
    public int AId { get; set; }
    public int Score { get; set; }
}

以下 linq 表达式创建一个可枚举,其中包含一个公司对象和一个所有问题的可枚举以及分配给该公司的所有成员的平均分数(ObjA 的 Id 属性)。

var result = listA.Join(listB, a => a.Id, b => b.AId, (a, b) =>
    new
    {
        OrgName = a.OrgName,
        QuestionId = b.QuestionId,
        Score = b.Score
    }).GroupBy(g => g.OrgName).Select(r =>
        new
        {
            OrgName = r.Key,
            AverageByQuestion = r.GroupBy(x => x.QuestionId).Select(y => new { QuestionId = y.Key, Score = y.Average(z => z.Score) })
        });

【讨论】:

    猜你喜欢
    • 2019-08-25
    • 2014-05-10
    • 2019-07-29
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    相关资源
    最近更新 更多