Linq:按ID排序按级别分组然后按字母顺序麻烦

时间:2013-11-04 21:20:54

标签: c# linq linq-to-dataset

所以我有一个数据视图,可以提取一些与代理商相关的信息,我希望按代理商对数据进行分组,这样名称只出现一次,然后按字母顺序排列,然后按级别排序。等级指的是等级1,等级2,等级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;

1 个答案:

答案 0 :(得分:1)

您当前的代码无效,因为您对集合进行了两次排序 - 第一次按ID排序,而不是再次排序,而是按级别排序。你需要的是同时按id和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")