Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 得到“的和”;数量“;按属性分组时_C#_Linq - Fatal编程技术网

C# 得到“的和”;数量“;按属性分组时

C# 得到“的和”;数量“;按属性分组时,c#,linq,C#,Linq,我有一份班级产品清单 List<Products> lstProducts; public class Products { public string Types {get; set;} public string Quantity {get; set;} } 我想返回一个包含类型及其总数量的字典: (Silver, 3) (Gold, 1) 我尝试了以下代码,但它给了我错误的计数,我做错了什么 lstProducts.GroupBy(x => x

我有一份班级产品清单

List<Products> lstProducts;

public class Products
{
    public string Types {get; set;}
    public string Quantity {get; set;}
}   
我想返回一个包含类型及其总数量的字典:

(Silver, 3)
(Gold, 1)
我尝试了以下代码,但它给了我错误的计数,我做错了什么

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

您的
数量
属于数据类型
字符串
,因此您需要首先将其转换为
int
,然后应用
Sum
计算特定
类型
的总量
数量

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();
输出:


您的
数量
属于数据类型
字符串
,因此您需要首先将其转换为
int
,然后应用
Sum
计算特定
类型
的总量
数量

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();
输出:

类似这样的内容:

 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();
大概是这样的:

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

@ArunPratap我只是不想要
类型的计数。我想要他们的
数量的总和,如示例中所述。我的代码没有返回那你是说你想要一个总数?如果是这样,请使用a并将数字键入整数或其他合适的数字,而不是字符串。@ArunPratap我只是不想要
类型的计数。我想要他们的
数量的总和,如示例中所述。我的代码没有返回那你是说你想要一个总数?如果是这样的话,请使用a并将数字键入整数或其他合适的数字,而不是字符串。