1

所以我有一个数据视图,它可以提取与某个机构相关的一些信息,我想按机构对数据进行分组,以便名称只出现一次,然后按字母顺序,然后按级别。Level 指的是 Level 1、Level 2、Level 3。在 Linq 中可以做到这一点吗?如果是这样,怎么做?谢谢。

EnumerableRowCollection<DataRow> query = 
     from agency in dtAllContacts.AsEnumerable()
     orderby agency.Field<Int32?>("ID") == null ? 0 : agency.Field<Int32>("ID")
     orderby agency.Field<Int32>("Level")  
     select agency;
4

1 回答 1

1

您当前的代码不起作用,因为您对集合进行了两次排序 - 第一次按 id 排序,然后再次排序,但按级别排序。您需要同时按 id AND level 排序。因此,您需要单个orderby运算符:

 from agency in dtAllContacts.AsEnumerable()
 orderby agency.Field<Int32?>("ID") == null ? 0 : agency.Field<Int32>("ID"),
         agency.Field<Int32>("Level")  
 select agency;

这将生成ThenBy运算符。您还可以使用可为空类型的GetValueOrDefault方法简化第一个条件:

 orderby agency.Field<int?>("ID").GetValueOrDefault(),
         agency.Field<int>("Level")
于 2013-11-04T21:29:30.473 回答