组列出与列表b的联接并获取列表b中项目的平均值

时间:2014-07-01 10:35:15

标签: linq list lambda

我有两个列表列表A和列表B,它们可以在公共属性(Id)上连接,我正在尝试做的是在其属性之一(OrgName)上对列表A进行组合,并将其与列表B连接列表B包含给出一组问题的所有答案。我想获得该组织每个问题的平均分数。

任何建议都将不胜感激。

如果它更容易列表A,则是一个Submission对象的List。提交的成员包括Id,firstName,surname,company,email等,并且还包含答案对象List类型的成员答案。答案对象有成员,如Id,问题,答案。

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

1 个答案:

答案 0 :(得分: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) })
        });