选择与dataTable.AsEnumerable不同

时间:2013-12-09 11:27:58

标签: 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

如您所见,它仅包含主题列的不同数据。

现在,我想获得classRoomNum列的值。由于所有行的值都相同,我使用以下 -

var stdDetails = from r in DtTable.AsEnumerable()
select new
    {
        Class = r.Field<string>("Class").ToString(),
        RoomNum = r.Field<string>("RoomNum").ToString()
    };

下一步该怎么做?我需要值5和10.任何帮助?

2 个答案:

答案 0 :(得分:4)

只需添加Distinct()来电即可。因此,匿名类型具有使用其所有属性的默认EqualsGetHashCode实现,您将只获得不同的类和房间号对:

var stdDetails = (from r in DtTable.AsEnumerable()
                  select new {
                      Class = r.Field<string>("Class"),
                      RoomNum = r.Field<string>("RoomNum")
                  }).Distinct();

顺便说一句,您不需要在字段值返回时调用ToString()。它将被转换为通用参数的类型,即在您的情况下为字符串。此外,您似乎在这些列中有整数值,因此请考虑将其转换为r.Field<int>

的整数

答案 1 :(得分:1)

您可以使用“Distinct()”功能,如链接

中所述

How to use LINQ Distinct() with multiple fields

您必须选择所需的所有字段,然后应用不同的功能。