簡體   English   中英

如何在C#中動態獲取值的總和到不同的變量

[英]How to get sum of values dynamically to different variable in c#

我有一個包含員工詳細信息的對象( Details )。 該對象具有屬性( salLevel )。
我只想獲取每個Levelsal總額。

 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},
    };

如果我們計算,我們得到:

  1. 等級(1)= 3
  2. 等級(2)= 4
  3. 等級(3)= 9

解決方案一(好):

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM