C# 选择distinct from dataTable.AsEnumerable
我有一个数据表dtStudent,其结构如下C# 选择distinct from dataTable.AsEnumerable,c#,linq,datatable,linq-to-dataset,C#,Linq,Datatable,Linq To Dataset,我有一个数据表dtStudent,其结构如下 Id | Name | Class | RoomNum | Subject --------------------------------------- 1 | ABC | 5 | 10 | Maths 1 | ABC | 5 | 10 | Science 1 | ABC | 5 | 10 | English 如您所见,它仅包含主题列的不同数据 现在,我想获取class和RoomN
Id | Name | Class | RoomNum | Subject
---------------------------------------
1 | ABC | 5 | 10 | Maths
1 | ABC | 5 | 10 | Science
1 | ABC | 5 | 10 | English
如您所见,它仅包含主题列的不同数据
现在,我想获取class
和RoomNum
列的值。由于所有行的值都相同,因此我使用以下命令-
var stdDetails = from r in DtTable.AsEnumerable()
select new
{
Class = r.Field<string>("Class").ToString(),
RoomNum = r.Field<string>("RoomNum").ToString()
};
var stdDetails=来自DtTable.AsEnumerable()中的r
选择新的
{
Class=r.Field(“Class”).ToString(),
RoomNum=r.Field(“RoomNum”).ToString()
};
下一步怎么办?我需要值5和10。有什么帮助吗?只需添加Distinct()
调用即可。因此,匿名类型有默认的Equals
和GetHashCode
实现,它们使用它们的所有属性,您将只得到不同的类和房间号对:
var stdDetails = (from r in DtTable.AsEnumerable()
select new {
Class = r.Field<string>("Class"),
RoomNum = r.Field<string>("RoomNum")
}).Distinct();
var stdDetails=(来自DtTable.AsEnumerable()中的r)
选择新的{
类别=r.字段(“类别”),
RoomNum=r.字段(“RoomNum”)
}).Distinct();
顺便说一句,对于字段的值返回,您不需要调用ToString()
。它将转换为泛型参数的类型,即在您的情况下转换为字符串。此外,这些列中似乎有整数值,因此请考虑使用r.Field
将其转换为整数,只需添加Distinct()
调用即可。因此,匿名类型有默认的Equals
和GetHashCode
实现,它们使用它们的所有属性,您将只得到不同的类和房间号对:
var stdDetails = (from r in DtTable.AsEnumerable()
select new {
Class = r.Field<string>("Class"),
RoomNum = r.Field<string>("RoomNum")
}).Distinct();
var stdDetails=(来自DtTable.AsEnumerable()中的r)
选择新的{
类别=r.字段(“类别”),
RoomNum=r.字段(“RoomNum”)
}).Distinct();
顺便说一句,对于字段的值返回,您不需要调用ToString()
。它将转换为泛型参数的类型,即在您的情况下转换为字符串。此外,这些列中似乎有整数值,因此请考虑使用r.Field将其转换为整数。您可以使用链接中解释的“Distinct()”函数
您必须选择所需的所有字段,然后应用distinct函数。您可以使用链接中解释的“distinct()”函数
你必须选择,您需要的所有字段,然后应用distinct函数。我尝试了它,但出现编译时错误:“System.Data.EnumerablerRowCollection”不包含“distinct”的定义,并且找不到接受“System.Data.EnumerablerRowCollection”类型的第一个参数的扩展方法“distinct”(是否缺少using指令或程序集引用?)
@MicrosoftDN请确保您的代码文件中使用了System.Linq
名称空间omg,这是一个愚蠢的错误。它现在可以工作了。但现在我的问题是如何获取值。我知道我可以使用foreach循环来循环并获取它,但因为它只有一个值sfter使用distinct()我不想使用foreach..任何替代方法?@MicrosoftDN您可以使用First()
仅获取第一个值。但实际上,您不应该知道将有多少不同的数据。否则,您只需使用DtTable.AsEnumerable().Select(r=>new{Class=…,RoomNum=…).First()
不带distinct@MicrosoftDN您可以使用前面提到的First()
。var result=..First()
然后使用result.Class
和result.RoomNum
我尝试了它,但它给出了编译时错误:“System.Data.EnumerablerRowCollection”不包含“Distinct”的定义,并且找不到接受“System.Data.EnumerablerRowCollection”类型的第一个参数的扩展方法“Distinct”(是否缺少using指令或程序集引用?)
@MicrosoftDN请确保您的代码文件中使用了System.Linq
名称空间omg,这是一个愚蠢的错误。它现在可以工作了。但现在我的问题是如何获取值。我知道我可以使用foreach循环来循环并获取它,但因为它只有一个值sfter使用distinct()我不想使用foreach..任何替代方法?@MicrosoftDN您可以使用First()
仅获取第一个值。但实际上,您不应该知道将有多少不同的数据。否则,您只需使用DtTable.AsEnumerable().Select(r=>new{Class=…,RoomNum=…).First()
不带distinct@MicrosoftDN您可以使用前面提到的First()
。var result=..First();
然后使用result.Class
和result.RoomNum