[英]How to get sum of values dynamically to different variable in c#
我有一个包含员工详细信息的对象( Details
)。 该对象具有属性( sal
和Level
)。
我只想获取每个Level
的sal
总额。
foreach (var emp in Details)
{
int empsal=emp.sal;
int empLevel= emp.Level;
}
示例:我希望所有员工的工资总额根据级别分为不同的变量。
var sumByLevels = Details.GroupBy(employee => employee.Level)
.ToDictionary(g => g.Key, g => g.Sum(x => x.sal));
现在假设您要获得第1级的总薪水:
var result = sumByLevels[1];
您可以使用LINQ的GroupBy
方法做到这一点:
Dictionary<int, int> sumsByLevel =
Details.GroupBy(employee => employee.Level, employee => employee.sal).
ToDictionary(group => group.Key, group => group.Sum());
这将导致一个词典,其中Level
为键,而相应sal
的总和为值。
第一个答案是好的。 例如,您有课:
public class Details
{
public int Level { get; set; }
public int Sal { get; set; }
}
你有数据:
var data = new List<Details>()
{
new Details() {Level = 1, Sal = 1},
new Details() {Level = 1, Sal = 1},
new Details() {Level = 1, Sal = 1},
new Details() {Level = 2, Sal = 2},
new Details() {Level = 2, Sal = 2},
new Details() {Level = 3, Sal = 3},
new Details() {Level = 3, Sal = 3},
new Details() {Level = 3, Sal = 3},
};
如果我们计算,我们得到:
解决方案一(好):
var sum = data.GroupBy(x => x.Level).ToDictionary(x => x.Key, a => a.Sum(b => b.Sal));
Console.WriteLine(sum[1]); // result 3
Console.WriteLine(sum[2]); // result 4
Console.WriteLine(sum[3]); // result 9
解决方法二(不是很好):
public int GetSumOfLevel(int level, List<Details> details)
{
return details.Where(x => x.Level == level).Sum(x => x.Sal);
}
...
Console.WriteLine(GetSumOfLevel(1, data)); // result 3
Console.WriteLine(GetSumOfLevel(2, data)); // result 4
Console.WriteLine(GetSumOfLevel(3, data)); // result 9
可能是第一个选择?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.