按分组获取数据表中的记录数

Ses*_*ame 5 c# datatable count

我有一个包含以下数据的DataTable:

Salesman---ClientID
Bob--------1
Bob--------2
Bob--------3
Tom--------4
Joe--------5
Joe--------6
Tim--------7
Tim--------8
Run Code Online (Sandbox Code Playgroud)

由此,我想了解每个推销员有多少客户.在这种情况下:

Salesman---CountOfClients
Bob--------3
Tom--------1
Joe--------2
Tim--------2
Run Code Online (Sandbox Code Playgroud)

此程序正在读取包含此数据的文本文件,并且未连接到数据库,因此SQL不是一个选项.

使用C#,我如何才能达到预期的效果?

Anw*_*dra 8

如果您可以使用LINQ,那么groupby子句将为您进行聚合.

// this is your datatable
DataTable table = new DataTable();
table.Columns.Add("Salesman", typeof(string));
table.Columns.Add("ClientID", typeof(int));

//insert your data
table.Rows.Add("Bob", 1);
table.Rows.Add("Bob", 2);
table.Rows.Add("Bob", 3);
table.Rows.Add("Tom", 4);
table.Rows.Add("Joe", 5);
table.Rows.Add("Joe", 6);
table.Rows.Add("Tim", 7);
table.Rows.Add("Tim", 8);

// query with LINQ 
var query = from row in table.AsEnumerable()
            group row by row.Field<string>("Salesman") into sales
            orderby sales.Key
            select new
            {
                Name = sales.Key,
                CountOfClients = sales.Count()
            };

// print result
foreach (var salesman in query)
{
    Console.WriteLine("{0}\t{1}", salesman.Name, salesman.CountOfClients);
}
Run Code Online (Sandbox Code Playgroud)

输出:

Bob    3
Joe    2
Tim    2
Tom    1
Run Code Online (Sandbox Code Playgroud)