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();
我有一个包含多个键列(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();