C# Linq 如何选择数据表中多列的不同行数

Posted

技术标签:

【中文标题】C# Linq 如何选择数据表中多列的不同行数【英文标题】:C# Linq How to select the distinct row count of multiple columns in a datatable 【发布时间】:2016-05-12 07:49:38 【问题描述】:

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

基本上我想执行查询

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

在数据表上。

我进行了一些研究,发现对于只包含一个键(并且没有“位置”)的表,我可以这样做

DataTable table = new DataTable();

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

但是我将如何使用多个键和一个条件来做呢?

【问题讨论】:

【参考方案1】:

试试这样的:

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

【讨论】:

谢谢!效果很好!我不得不稍微修改您的解决方案,因为我没有使用强类型数据表,并且 IsInError 是一个位字段。除此之外,它是完美的! 编辑它以更好地适合您的答案。 点赞! :) 谢谢【参考方案2】:

group by 可能更适合这种情况。

它将列分组为不同的行,并在需要时返回一个计数。

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

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

【讨论】:

谢谢!我会试试看的!

以上是关于C# Linq 如何选择数据表中多列的不同行数的主要内容,如果未能解决你的问题,请参考以下文章

将数据从源配置单元表的多列复制到目标配置单元表的不同行的单列

LINQ:如何选择唯一行:具有多列的 max(id)?

具有重复电子邮件 ID 的不同行数

.NET(C#) System.Linq中实现多列group by(分组)的示例代码

如何将信息行插入mysql数据库中的不同行?

如何在 C# WinForms 中使用 LINQ 从 DataGridView 中选择多个字段