在按属性分组时获取"数量"的总和

Ins*_*ian 0 c# linq

我有一个班级产品清单.

List<Products> lstProducts;

public class Products
{
    public string Types {get; set;}
    public string Quantity {get; set;}
}   
Run Code Online (Sandbox Code Playgroud)

在我的列表中有以下项目:

 Types      Quantity
 Silver       2
 Gold         1  
 Silver       1
Run Code Online (Sandbox Code Playgroud)

我想返回一个包含类型及其总数量的字典:

(Silver, 3)
(Gold, 1)
Run Code Online (Sandbox Code Playgroud)

我尝试了下面的代码,但它给了我错误的数字,我做错了什么?

lstProducts.GroupBy(x => x.Types).
    ToDictionary(g => g.Key.ToString(), g => g.Count().ToString());
Run Code Online (Sandbox Code Playgroud)

er-*_*sho 5

Quantity 是数据类型,string因此您需要先将其转换为int然后应用于Sum计算Quantity特定的总数Type.

var result = lstProducts
  .GroupBy(x => x.Types)
  .ToDictionary(
     g => g.Key.ToString(), 
     g => g
       .Select(x => !string.IsNullOrEmpty(x.Quantity) ? Convert.ToInt32(x.Quantity) : 0)
       .Sum()
       .ToString());

foreach (var item in result)
    Console.WriteLine(item.Key + " - " + item.Value);

Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述