C# Linq 如何 select 数据表中多列的非重复行计数

C# Linq How to select the distinct row count of multiple columns in a datatable

我有一个包含多个键列(key1、key2、...、keyN)的数据table。我想计算 table 中符合特定条件 (IsInError = false) 的不同组合键。

基本上我想执行查询

SELECT COUNT(*) FROM (SELECT DISTINCT key1, key2, ..., keyN FROM TABLE WHERE IsInError = 'false') A

关于数据table.

我研究了一下,发现对于只包含一个键(没有 'where')的 table,我可以这样做

DataTable table = new DataTable();

int nRows = table
    .AsEnumerable()
    .Select(r => r.Field<string>("key1"))
    .Distinct()
    .Count();

但是我该如何处理多个键和一个条件呢?

分组依据可能更适合这种情况。

它会将列分组到不同的行中,并且 return 如果需要,还会进行计数。

var groups = table.GroupBy(_ => new {_.Key1, _.Key2, _.KeyN})
                  .Select(_ => new { key = _.Key, count = _.Count());

这是未经测试的代码,但应该可以帮助您指明正确的方向。

尝试这样的事情:

table.AsEnumerable().Where(v => v.Field<bool>("IsInError") == false).Select(_ => new { key1 = _.key1, key2 = _.key2, ...., keyn=_.keyn }).Distinct().Count();