0

「Function」と「Date」の2つの列を持つデータテーブルを作成しました。このテーブルは、n個の関数のそれぞれがWebサイトで使用された日付を記録します。「アクセス」などの特定の機能がテーブルに表示される回数を抽出したいと思います。どんな助けでもありがたいです。

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を使用できます

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 に答える
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 に答える