我有一个包含以下数据的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 :(得分: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);
}
输出:
Bob 3
Joe 2
Tim 2
Tom 1
答案 1 :(得分:2)
SalesStats
和string Name
成员创建int ClientCount = 0
课程List<SalesStats>
SalesStats
集合中查找推销员OrElse使用Name
结果列表应包含每个销售员的客户总和
答案 2 :(得分:0)
我知道一个老问题,但是当我看时出现了。我个人发现...的出色结果
Dictionary<object, Int32> myGroupings = myDataTable.AsEnumerable().GroupBy(p => p.Field<object>("FieldName")).ToDictionary(p => p.Key, p => p.Count());
还有一个便笺..然后找出最大的计数数字是什么...
Int32 intDenominator = myGroupings.Values.Max();