C# 如何从dataview中选择单个分组列?

C# 如何从dataview中选择单个分组列?,c#,linq,datatable,dataview,C#,Linq,Datatable,Dataview,我有一个数据表tblWorkList,有多列:RecordNr,GroupNum,部分,SubscriberID,以及其他许多列 我需要做的是创建一个dataview或第二个datatable,它相当于: SELECT SubscriberID FROM tblWorkList GROUP BY SubscriberID; 我在应用程序中这样做是因为我需要在一个dataview中结束它,然后根据多个用户输入进行过滤。我让那部分工作。我已经花了好几个小时在互联网上绞尽脑汁,试图找出如何做到这一点

我有一个数据表
tblWorkList
,有多列:
RecordNr
GroupNum
部分
SubscriberID
,以及其他许多列

我需要做的是创建一个dataview或第二个datatable,它相当于:

SELECT SubscriberID FROM tblWorkList GROUP BY SubscriberID;
我在应用程序中这样做是因为我需要在一个dataview中结束它,然后根据多个用户输入进行过滤。我让那部分工作。我已经花了好几个小时在互联网上绞尽脑汁,试图找出如何做到这一点,但我不断遇到解决方案中的错误,这些解决方案看起来应该有效,但最终以惊人的失败告终。尽管如此,我现在对LINQ非常缺乏经验,所以我确信我错过了一些非常简单的东西

(基本功能是这样的:该表包含要处理的记录列表。基本上,我需要让表中充满记录,将订户ID拉入dataview,允许用户通过各种方法筛选dataview(并向用户提供与所选标准匹配的SubscriberID的运行计数),完成后,将与生成的
SubscriberID
集合关联的所有记录分配给要处理的特定分析员。)

我尝试用于创建SubscriberID值的列表或数据视图的所有方法都包含在以下内容中:

using (DataTable dt = dsWorkData.Tables["tblWorkData"])
tblWorkData
包含大约23000条记录

以下是我的几次尝试

尝试1-错误为

参数不能为null。参数:源'

尝试5-与尝试1相同的错误:

DataTable newDt = dt.AsEnumerable()
    .GroupBy(r => new { SubscriberID = r["SubscriberID"] })
    .Select(g => g.OrderBy(r => r["SubscriberID"]).First())
    .CopyToDataTable();

MessageBox.Show(newDt.Rows.Count.ToString());
var result = dt.AsEnumerable().GroupBy(row => row.Field<string>("SubscriberID"));

MessageBox.Show(result.Count().ToString());
var results = dt.AsEnumerable().GroupBy(g => g["SubscriberID"])
                                          .Select(x => x.First());
MessageBox.Show(results.Count().ToString());

所以,有人能解释一下我在这里做错了什么,或者至少能给我指出正确的方向吗?我真的不在乎使用哪种方法,只要有办法做到这一点。

答案是NetMage的两条评论:


您的SQL查询实际上是使用
groupby
来执行
DISTINCT
,因此只需使用LINQ
DISTINCT
dt.AsEnumerable().Select(r=>r.Field(“SubscriberID”).DISTINCT()


PS您的第一个错误意味着
dt
null
-
source
AsEnumerable
的参数名


您的SQL查询实际上是使用
groupby
来执行
DISTINCT
,因此只需使用LINQ
DISTINCT
dt.AsEnumerable().Select(r=>r.Field(“SubscriberID”).DISTINCT()
.PS您的第一个错误意味着
dt
null
-
source
AsEnumerable
的参数名。您可以通过在查询中添加WHERE来过滤空值。NetMage-谢谢,我明天会这样做。至于dt,我在第一次遇到错误时检查过,我正在引用的表是absolutely有记录-就在代码运行之前,表中的总记录数显示在screen.jdwent上-该字段中实际上没有空值。我检查过了,但如果NetMage的修复程序没有成功,我明天会继续使用它。谢谢!
DataTable newDt = dt.AsEnumerable()
    .GroupBy(r => new { SubscriberID = r["SubscriberID"] })
    .Select(g => g.OrderBy(r => r["SubscriberID"]).First())
    .CopyToDataTable();

MessageBox.Show(newDt.Rows.Count.ToString());
var result = dt.AsEnumerable().GroupBy(row => row.Field<string>("SubscriberID"));

MessageBox.Show(result.Count().ToString());
var results = dt.AsEnumerable().GroupBy(g => g["SubscriberID"])
                                          .Select(x => x.First());
MessageBox.Show(results.Count().ToString());