【问题标题】:Select distinct from dataTable.AsEnumerable选择与 dataTable.AsEnumerable 不同
【发布时间】:2013-12-09 11:27:58
【问题描述】:

我有一个数据表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。有什么帮助吗?

【问题讨论】:

    标签: c# linq datatable linq-to-dataset


    【解决方案1】:

    只需添加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&lt;int&gt; 将其转换为整数

    【讨论】:

    • 我试过了,但是编译时出错:'System.Data.EnumerableRowCollection&lt;AnonymousType#1&gt;' does not contain a definition for 'Distinct' and no extension method 'Distinct' accepting a first argument of type 'System.Data.EnumerableRowCollection&lt;AnonymousType#1&gt;' could be found (are you missing a using directive or an assembly reference?)
    • @MicrosoftDN 确保您的代码文件中使用了 System.Linq 命名空间
    • 天啊,愚蠢的错误。现在开始工作了。但现在我的问题是我现在如何获得这些值。我知道我可以使用 foreach 循环来循环并获取它,但是由于它在使用 distinct() 之后只有一个值,所以我不想使用 foreach .. 任何替代方案?
    • @MicrosoftDN 您可以使用First() 仅获取第一个值。但是您实际上不应该知道您将拥有多少不同的数据。否则,您只需使用 DtTable.AsEnumerable().Select(r =&gt; new { Class = .., RoomNum = ... }).First() 而无需区分
    • @MicrosoftDN 你可以使用First(),正如我之前提到的。 var result = ....First(); 然后使用 result.Classresult.RoomNum
    【解决方案2】:

    您可以按照链接中的说明使用“Distinct()”函数

    How to use LINQ Distinct() with multiple fields

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-09
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 2014-01-22
      • 2016-10-20
      相关资源
      最近更新 更多