【问题标题】:Group elements by count in IEnumerable在 IEnumerable 中按计数对元素进行分组
【发布时间】:2012-03-24 02:19:13
【问题描述】:

我们如何通过给定列的值获取行数?

  • 我正在从存储过程返回的数据表创建 IEnumerable

        DataSet ds = new DataSet();
        // code to get table using sp    
        IEnumerable<DataRow> Myrows = ds.Tables[0].AsEnumerable();
    
  • 我的表返回类似的数据

       Id | Column1 | Column2 | Column3 |
        1 | xCol1   | xCol2   | xCol3   |
        2 | xCol1   | xyy     | ser     |
        3 | xCol2   | 2324    | ser     |
    
  • 现在我想获取按 Column1 分组的行数。所以我的结果应该是

        Count | Column |
          2   | xCol1  |
          1   | xCol2  |
    

【问题讨论】:

标签: .net group-by ienumerable


【解决方案1】:
    DataSet ds = new DataSet();
    // code to get table using sp    
    var grouped = ds.Tables[0].AsEnumerable().GroupBy(q=>q.Table.Columns["column1"]).Select(q=> new{Count = q.Count(), Column = q});

我没试过。但类似的东西。

【讨论】:

    【解决方案2】:

    有几种方法可以做到这一点:

    1. 遍历 IEnumerable 集合并计算元素。
    2. 如果您不想迭代,请使用Myrows.ToList().Count,它将从IEnumerable 集合创建一个列表并获取列表的Count 属性。

    您可以使用 linq 进行分组并从那里获取计数。这是一个例子:

    var groups =
      from row in rows
      group rows by row.Column;
    
    foreach (var group in groups)
      Console.WriteLine("key: {0} count: {1}",
        group.Key, group.Count());
    

    有关更多信息,另请参阅此问题:Howto: Count the items from a IEnumerable without iterating?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-25
      • 2017-10-04
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      • 2019-07-27
      • 2017-03-18
      相关资源
      最近更新 更多