将四个列表的总分数分配到一个列表

时间:2014-05-04 11:16:39

标签: c# list

我有Employee个对象的列表。员工类看起来像这样:

class Employee
{
   int empId,
   String empName,
   double score,
   String department
}

我有一个这样的字典对象:

Dictionary<int, List<Employee>> = new Dictionary<int, List<Employee>>();

这本词典有四个键(1,2,3,4)。具有id的员工可能存在于所有四个列表中,并且可能不存在。我想要一份员工的汇总列表,其中得分是员工所有分数的总和。

示例:如果ID = 1的员工在四个列表中得分为10分,20分,30分和40分,那么结果列表应该有一个得分为100的员工的条目。我该怎么办?< / p>

1 个答案:

答案 0 :(得分:2)

使用LinQ:

var yourdict = new Dictionary<int, List<Employee>>();
var yourId = 17;

var score = yourDict.Values
                    .SelectMany(x => x)
                    .Where(emp => emp.empId == yourId)
                    .Select(x => x.score)
                    .Sum();

或为所有人分组:

var employeeIdsAndScores = yourDict.Values
                                   .SelectMany(x => x)
                                   .GroupBy(emp => emp.Id)
                                   .Select(g => new { EmployeeId = g.Key, Score = g.Select(x => x.score).Sum() } );

foreach(var emp in employeeIdsAndScores)
{
   Console.WriteLine("Employee Id={0} scored {1} points in total", emp.EmployeeId, emp.Score);
}