如何计算项目在c#中数据表的列中出现的次数

时间:2012-11-30 15:04:52

标签: c# datatable count

我创建了一个包含两列的数据表,“Function”和“Date”。此表记录了在网站上使用每个n函数的日期。我想提取表中出现特定功能(如“访问”)的次数。任何帮助将不胜感激。

DataTable table = new DataTable();

table.Columns.Add("Function", typeof(string));
table.Columns.Add("Date", typeof(datetime));

table.Rows.Add(Access, 01/08/2012);
table.Rows.Add(Load, 01/08/2012);
table.Rows.Add(Save, 01/08/2012);
table.Rows.Add(Access, 02/08/2012);
table.Rows.Add(Print, 02/08/2012);

int accessCount = 0;

foreach (DataRow row in table.Rows)
{
    if (row["Function"] == "Access")
    {
        accessCount++;
    }
}

3 个答案:

答案 0 :(得分:0)

var results = table.AsEnumerable()
    .GroupBy(row => row.Field<string>("Function"))
    .Select(group => new 
    {
        Function = group.Key,
        Count = group.Count(),
    });

答案 1 :(得分:0)

你可以使用linq

var result = from rec in table.AsEnumerable 
             group rec by rec.Field<string>("Function") into g 
             select new { Function = g.Key, Count = g.Count()}

答案 2 :(得分:0)

您可以使用Linq-To-DatatableEnumerable.GroupBy按功能分组。然后,您可以使用ToDictionary构建一个字典,其函数为key,count为value:

var functionLookup = table.AsEnumerable()
    .GroupBy(r => r.Field<string>("Function"))
    .ToDictionary(g => g.Key, g => g.Count());

int accessCount = functionLookup["Access"];  // 2

请注意,默认情况下它区分大小写。如果您希望它不区分大小写,则需要为密钥传递适当的IEqualityComparer,在这种情况下:

.ToDictionary(g => g.Key, g => g.Count(), StringComparer.OrdinalIgnoreCase);