如何从数据视图中选择单个分组的列?

问题描述

我有一个数据表tblWorkList,其中包含多列:RecordNrGroupNumSectionSubscriberID,还有很多其他列。

我需要做的是创建一个数据视图或第二个数据表,其等效于:

SELECT SubscriberID FROM tblWorkList GROUP BY SubscriberID;

我正在应用程序中执行此操作,因为我需要此操作结束于一个数据视图中,然后该数据视图将根据多个用户输入进行过滤。我有那部分工作。我已经花了几个小时在互联网上狂奔,试图弄清楚如何做到这一点,但是我一直在寻找解决方案中的错误,这些错误看起来像它们应该起作用,但最终会失败。虽然,也就是说,我现在对LINQ完全没有经验,所以我确定我缺少一些非常简单的东西。

(基本功能是:该表包含要处理的记录的列表。基本上,我需要将该表充满记录,将订户ID放入数据视图中,允许用户通过以下方式过滤该数据视图多种方法(并向用户提供与所选条件匹配的SubscriberID的数量的连续计数),完成后,将与结果SubscriberID集合关联的所有记录分配给特定分析师,以进行处理。)

我试图用来创建SubscriberID值的列表或数据视图的所有方法都包含在其中:

using (DataTable dt = dsWorkData.Tables["tblWorkData"])

tblWorkData包含大约23,000条记录。

这是我的几次尝试。

尝试1-错误

参数不能为空。参数:source'

var result1 = from row in dt.AsEnumerable()
              group row by row.Field<string>("SubscriberID") into grp
              select new { SubscriberID = grp.Key };

ShowMessage(result1.Count().ToString());

尝试2-错误

“无法隐式转换匿名类型:将字符串SubscriberID转换为DaTarow”

EnumerableRowCollection<DaTarow> query =
    from row in dt.AsEnumerable()
    group row by row.Field<string>("SubscriberID") into grp
    select new { SubscriberID = grp.Key };

尝试3-错误

“ [第三个]名称“行”在当前上下文中不存在。”

EnumerableRowCollection<DaTarow> query2 =
    from row in dt.AsEnumerable()
    group row by row.Field<string>("SubscriberID") into grp
    select row;

尝试4-与尝试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());

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

var result = dt.AsEnumerable().GroupBy(row => row.Field<string>("SubscriberID"));

MessageBox.Show(result.Count().ToString());

尝试6-与尝试1相同的错误

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

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

解决方法

答案是NetMage的一对评论:

您的SQL查询实际上是在使用GROUP BY来执行DISTINCT,因此只需使用LINQ Distinctdt.AsEnumerable().Select(r => r.Field<string>("SubscriberID") ).Distinct()

PS您的第一个错误意味着dtnull-sourceAsEnumerable的参数名称。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...