2013-11-04 251 views
1

因此,我有一个数据视图,该数据视图拉回与代理机构相关的一些信息,并且我想按代理机构对数据进行分组,因此该名称只出现一次,然后按字母顺序排列,然后按级别。级别指的是Level 1,Level 2,Level 3.在Linq中可以这样做吗?如果是这样,怎么样?谢谢。Linq:按ID排序,然后按字母顺序按字母排序

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

您当前的代码是不工作的,因为你两次排序集 - 第一次由ID,并且比你重新排序,但水平。你需要的是在同一时间通过ID和级别进行排序。所以,你需要单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") 
+1

我想你也可以用'agency.Field (“ID”)? 0'。 – pescolino

+0

@pescolino是的,这也是不错的选择 –

+0

嘿busyberezovsky,那么分组呢? (“我想按代理商分组数据 - 然后订购”)。 –