我有一个班级产品清单.
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)
您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)
输出: