2013-11-04 316 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,那麼分組呢? (「我想按代理商分組數據 - 然後訂購」)。 –