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