一尘不染

高效的数据表分组依据

c#

我想对一个数据表执行聚合查询以创建另一个数据表。我无法更改用于创建初始数据表的SQL。

原始数据表:(一切都是整数)

TeamID | MemberID
-------|-----------
1      | 1
1      | 2
1      | 3
2      | 4
2      | 5

所需结果:

TeamID | MemberIDCount
-------|--------------
1      | 3
2      | 2

如果是SQL,我可以做

Select TeamID, Count(*) From Table Group By TeamID

但是在我的应用程序中,我唯一知道如何处理的方法是这样的:

Dictionary<int,int> d = new Dictionary<int,int>();
foreach (DataRow dr in dt.Rows)
{
    if (d.ContainsKey(dr.ID))
    {
        d[dr.ID] = d[dr.ID] + 1;
    }
    else
    {
        d.Add(dr.ID, 1);
    }
}

有没有更好的办法?


阅读 355

收藏
2020-05-19

共1个答案

一尘不染

您可以使用Linq。

var result = from row in dt.AsEnumerable()
              group row by row.Field<int>("TeamID") into grp
               select new
                 {
                 TeamID = grp.Key,
                  MemberCount = grp.Count()
                  };
 foreach (var t in result)
     Console.WriteLine(t.TeamID + " " + t.MemberCount);
2020-05-19