2011-04-06 91 views
4

的数据表中的记录数我有以下数据的DataTable:获得通过分组

Salesman---ClientID 
Bob--------1 
Bob--------2 
Bob--------3 
Tom--------4 
Joe--------5 
Joe--------6 
Tim--------7 
Tim--------8 

由此,我想获得的每个业务员多少客户有一个计数。在这种情况下:

Salesman---CountOfClients 
Bob--------3 
Tom--------1 
Joe--------2 
Tim--------2 

此程序是在文本文件中读取这个数据并没有连接到数据库,所以SQL不是一个选项。

使用C#,我该如何完成预期的结果?

+0

你能发布您的代码吗?您可以考虑使用Datatable。 – WorldIsRound 2011-04-06 22:41:32

回答

7

如果你可以使用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); 
} 

输出:

Bob 3 
Joe 2 
Tim 2 
Tom 1 
2
  1. 创建SalesStats类与string Nameint ClientCount = 0成员
  2. 创建List<SalesStats>
  3. 打开文件
  4. 阅读SalesStats收集各条线和
    • 查找推销员否则容易增加新的推销员用Name
    • 递增该推销员的ClientCount
  5. 关闭文件

结果列表中应该有客户的总和每个业务员