C# 如何计算一个值在数据表中出现的次数

C# 如何计算一个值在数据表中出现的次数,c#,datatable,C#,Datatable,我有一个只有一列的数据表(列a): DataTable结果可能与上面的不同,因此我不能使用静态值 我如何迭代该列,以便计算该列中每行重复多少相同值 大概是这样的: Good = 3 NOT GOOD = 1 PERFECT = 2 另一个例子: Column A DO IT DON'T DO IT DON'T DO IT DON'T DO IT DO IT DO IT 结果是: DO IT = 3 DON'T DO IT = 3 使用AsEnumerable,以及DataRow上的一些LI

我有一个只有一列的数据表(
列a
):

DataTable结果可能与上面的不同,因此我不能使用静态值

我如何迭代该列,以便计算该列中每行重复多少相同值

大概是这样的:

Good = 3
NOT GOOD = 1
PERFECT = 2
另一个例子:

Column A
DO IT
DON'T DO IT
DON'T DO IT
DON'T DO IT
DO IT
DO IT
结果是:

DO IT = 3
DON'T DO IT = 3

使用
AsEnumerable
,以及
DataRow
上的一些LINQ,按其值对项目进行分组,并获取计数:

var dt = new DataTable();
dt.Columns.Add("A");
dt.Rows.Add("GOOD");
dt.Rows.Add("NOT GOOD");
dt.Rows.Add("GOOD");
dt.Rows.Add("PERFECT");
dt.Rows.Add("PERFECT");
dt.Rows.Add("GOOD");

var result = dt.AsEnumerable()
               .GroupBy(r => r.Field<string>("A"))
               .Select(r => new
                            {
                               Str = r.Key,
                               Count = r.Count()
                            });

foreach (var item in result)
{
    Console.WriteLine($"{item.Str} : {item.Count}");
}
var dt=new DataTable();
dt.列。添加(“A”);
dt.行。添加(“良好”);
dt.行添加(“不好”);
dt.行。添加(“良好”);
添加(“完美”);
添加(“完美”);
dt.行。添加(“良好”);
var result=dt.AsEnumerable()
.GroupBy(r=>r.Field(“A”))
.选择(r=>new
{
Str=r.键,
Count=r.Count()
});
foreach(结果中的var项目)
{
WriteLine($“{item.Str}:{item.Count}”);
}
好:3

不好:1

完美:2


我正在根据每行“A”列的值创建组,然后获取字符串值和计数。

您可以使用linq对datatable中的列进行分组:

  var groups = dt.AsEnumerable()
                .GroupBy(r => r.Field<ColumnType>("columnName"), 
                (row, g) => new { Column = row, count = g.Count() });
var group=dt.AsEnumerable()
.GroupBy(r=>r.Field(“columnName”),
(row,g)=>new{Column=row,count=g.count()});

分组依据有什么问题吗?我试过:
datatable.DefaultView.ToTable(true,“列A”)但这不起作用。我猜我首先必须获得唯一的行,然后循环遍历datatable并添加到计数器?如果您想要手动迭代,那么您可以做到,嗯,就是这样。循环记录并在字典中添加/增加值。如果字符串在字典中,则增加该值。如果不是,则添加一个
1
。在循环结束时,您将获得要查找的信息。
AsEnumerable
是DataTable的扩展,位于System.Data namespace.Odd中。我的解决方案中有这个名称空间:/看起来它是在.NET 3.5中产生的,必须添加以下dll:
System.Data.DataTableExtensions
…)@Si8很好的电话,我实际上没有意识到它是在另一个地方。谢谢你的解决方案+答案是1
  var groups = dt.AsEnumerable()
                .GroupBy(r => r.Field<ColumnType>("columnName"), 
                (row, g) => new { Column = row, count = g.Count() });