【问题标题】:C# Sum up values in Lists of ListC# 总结 Lists of List 中的值
【发布时间】:2021-06-27 11:00:34
【问题描述】:

是否可以仅使用 linq 总结 List 列表中的所有值?
我有有效的代码,但也许有一种不需要 foreach 循环的 LINQ 的出路

        double totalSum = 0;
        Guid key = ((KeyValuePair<Guid, string>)ComboBoxUsers.SelectedItem).Key;
        var listOfLists = process._statistics.Where(a => a.UserID == key).Select(p => p.KgIntoBucket);

        foreach(List <double> kg in listOfLists)
        {
            totalSum += kg.Sum();

        }
        lblKgToBucket.Text = totalSum.ToString();

【问题讨论】:

  • double totalSum = listOfLists.SelectMany(list =&gt; list).Sum();

标签: c# linq sum


【解决方案1】:

使用SelectMany,它将有助于将序列扁平化为一个序列:

var totalSum= listOfLists.SelectMany(x => x).Sum();

【讨论】:

  • 我把它放在一行double listOfLists = process._statistics.Where(a =&gt; a.UserID == key).Select(p =&gt; p.KgIntoBucket).SelectMany(list =&gt; list).Sum();
  • 我更喜欢你以前的方法,因为它更容易阅读和理解逻辑:)
  • 如你所说,先生!
【解决方案2】:

没有测试,但我认为你可以写:

double sum = listOfLists.Select(innerList=>innerList.Sum()).Sum();

Select 方法将返回一个 IEnumerable,其中包含所有子列表的总和,而不是它的总和。

(我是用手机写的,如果代码有问题,请见谅)

【讨论】:

    【解决方案3】:

    试试这个

            List<List<double>> lstDouble = new List<List<double>>();
    
    
            List<double> items1 = new List<double>() { 1.231, 4.561, 10.891 };
            List<double> items2 = new List<double>() { 1.232, 4.562, 20.892 };
            List<double> items3 = new List<double>() { 1.233, 4.563, 7.893 };
            List<double> items4 = new List<double>() { 1.234, 30.564, 7.894 };
            List<double> items5 = new List<double>() { 40.235, 4.565, 7.895 };
    
            lstDouble.Add(items1);
            lstDouble.Add(items2);
            lstDouble.Add(items3);
            lstDouble.Add(items4);
            lstDouble.Add(items5);
    
            var sum = lstDouble.SelectMany(x => x).Sum();
    

    【讨论】:

      【解决方案4】:

      您可以使用 linq 的 AsQueryable() 来做到这一点!

      public class Program
      {
          public static void Main()
          {
              double totalSum = 0;
              List<int> list = new List<int> { 99, 34, 77, 75, 87,77, 35, 88};
              var listOfLists = list.Where(a => a == 77).ToList();
              int res = listOfLists.AsQueryable().Sum();
             
              Console.WriteLine(res);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-22
        • 1970-01-01
        • 2012-09-25
        • 2015-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多