【问题标题】:How can I use sql Aggregate functions in C# DataTable如何在 C# DataTable 中使用 sql 聚合函数
【发布时间】:2013-05-15 11:30:53
【问题描述】:

我想在我的 DataTable 中应用以下 Sql 查询

SELECT MakeDistinct AS AfterDistinct
       , COUNT(MakeDistinct) AS Count
    FROM MyTable
GROUP BY MakeDistinct

更多详情请参考Question

【问题讨论】:

  • 那么,问题出在哪里?
  • 请展示一些源代码...你试过什么?有什么问题?
  • 你不能......只是在链接的问题接受的答案中运行查询并将其保存到另一个数据表中,或者在现有数据表上循环进行计数,最终使用 rowfilter 属性。 .
  • 在 c# DataTable 中,如果我使用 DataTable.Select() 方法,我只能在 where 条件之后定义子句。我想要这个问题中提到的带有新列的结果集。 stackoverflow.com/questions/16562862/…
  • ooooh DataTable 不了解计算。通过 Linq 查询

标签: c#


【解决方案1】:

类似:

var query = from row in table.AsEnumerable()
            group row by row.Field<int>("MakeDistinct") into grp
            select new {AfterDistinct = grp.Key, Count = grp.Count()};

foreach(var row in query) {
    Console.WriteLine("{0}: {1}", row.AfterDistinct, row.Count);
}

请注意,在数据库服务器上进行聚合通常比通过网络填充 DataTable 然后聚合 DataTable 更有效。

【讨论】:

    【解决方案2】:

    您正在部分寻找DataTable.Compute。该方法可以为您计算聚合函数。所以你会得到类似的东西:

    object sumObject;
    sumObject = myDataTable.Compute("Sum(Count)", ""); // second parameter is the where clause
    

    要按列分组,请参阅此问题:Efficient DataTable Group By。它提供了一个 Linq 实现以及一个“非 Linq”实现。

    【讨论】:

      【解决方案3】:

      使用 System.Data.DataSetExtensions 并尝试类似的方法

      var result = from row in dt.AsEnumerable()
                    group row by row.Field<int>("MakeDistinct") into grp
                    select new
                       {
                          MakeDistinct = grp.Key,
                          Count = grp.Count()
                       };
      

      【讨论】:

        猜你喜欢
        • 2020-06-08
        • 1970-01-01
        • 1970-01-01
        • 2017-01-29
        • 2015-12-29
        • 2016-11-04
        • 2014-01-04
        • 1970-01-01
        • 2013-02-27
        相关资源
        最近更新 更多