0

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

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++;
    }
}
4

3 回答 3

0
var results = table.AsEnumerable()
    .GroupBy(row => row.Field<string>("Function"))
    .Select(group => new 
    {
        Function = group.Key,
        Count = group.Count(),
    });
于 2012-11-30T15:08:38.213 回答
0

您可以使用Linq-To-DatatableEnumerable.GroupBy按您的功能进行分组。然后你可以用ToDictionary函数作为键,计数作为值来构建一个字典:

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);
于 2012-11-30T15:18:07.800 回答
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()}
于 2012-11-30T15:09:40.623 回答