计算C#中数据表中所有重复行的数量

时间:2014-06-24 13:13:42

标签: c# asp.net datatable

我通过运行存储过程来填充数据集,并且我从数据集填充数据表。

DataSet RawDataSet = DataAccessHelper.RunProcedure("storedprocedureName");
//this will just return the dataset by running the procedure
DataTable RankTable = RawDataSet.Tables[0];

数据表具有以下值:

Vicky   Login   6/24/2014
Vicky   Login   6/25/2014
Arun    Game    6/26/2014
Arun    Login   6/27/2014
Kumar   Login   6/28/2014
Kumar   Game    6/29/2014
Arun    Login   6/30/2014
Arun    Login   7/1/2014
Kumar   Game    7/2/2014
Vicky   Login   7/3/2014
Arun    Login   7/4/2014
Arun    Game    7/5/2014

我想解析这个dataTable并得到每个人做了多少次动作,即每行重复多少次:

Vicky   Login  3
Arun    Game   2
Arun    Login  4
Kumar   Login  1
Kumar   Game   2

我是C#的新手。这可以使用SQL中的count(*)来完成,但我需要使用C#来完成此操作。 如果有任何方法可以实现这一点,请告诉我。

我搜索了SO但是所有帖子都与删除重复项/找到重复项有关,这无法解决我的目的。

1 个答案:

答案 0 :(得分:5)

您可以使用LINQ来实现:

var query = RankTable.AsEnumerable()
                    .GroupBy(r => new { Name = r.Field<string>("Name"), Action = r.Field<string>("Action") })
                    .Select(grp => new
                    {
                        Name = grp.Key.Name,
                        Action = grp.Key.Action,
                        Count = grp.Count()
                    });

此处Name被假定为第一列的列名称,Action被假定为第二列的名称,其中包含登录,游戏等值。

您可能会看到LINQ to DataSet - MSDN

输出用途:

foreach (var item in query)
{
    Console.WriteLine("Name: {0}, Action: {1}, Count: {2}",item.Name, item.Action,item.Count);
}