【问题标题】:Get sum of "quantity" when grouping by a property [duplicate]按属性分组时获取“数量”的总和[重复]
【发布时间】:2018-12-27 07:18:26
【问题描述】:

我有一个班级产品列表。

List<Products> lstProducts;

public class Products
{
    public string Types {get; set;}
    public string Quantity {get; set;}
}   

我的清单中有以下项目:

 Types      Quantity
 Silver       2
 Gold         1  
 Silver       1

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

(Silver, 3)
(Gold, 1)

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

lstProducts.GroupBy(x => x.Types).
    ToDictionary(g => g.Key.ToString(), g => g.Count().ToString());

【问题讨论】:

  • @ArunPratap 我只是不想要Types 的计数。我想要他们Quantity 的总数,如示例中所述。我的代码没有返回那个
  • 你的意思是你想要一个总和?如果是这样,请使用Sum 并将您的数字键入为整数或任何合适的类型,而不是字符串。

标签: c# linq


【解决方案1】:

您的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();

输出:

【讨论】:

    【解决方案2】:

    类似这样的:

     var data = lstProducts.GroupBy(i => i.Types)
                                      .Select(x => {
                                              var ret = x.First();
                                              ret.Quantity = x.Sum(xt => Convert.ToInt32(xt.Quantity)).ToString();
                                              return ret;
                                             }).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 2022-01-26
      • 1970-01-01
      相关资源
      最近更新 更多