2013-06-27 183 views
0

我有自定義集合LoanOptionsProgramVersionList它具有布爾屬性Configured,字符串DescriptionCode。在插入和從集合中刪除我想按以下順序排序集合。因此插入到配置的數據庫的一條記錄變爲是。當刪除Configured成爲「否」。所以它通知財產。Linq查詢排序集合

  1. 排序配置
  2. 然後通過描述
  3. 然後由代碼

我已經嘗試下面的代碼插入之後。

IOrderedEnumerable<ProgramVersionRecord> orderedList =  
    LoanOptionsProgramVersionList 
     .OrderByDescending(p => p.ProgramVersionConfigured == true); 

而且下面的代碼刪除

IOrderedEnumerable<ProgramVersionRecord> orderedList = 
     LoanOptionsProgramVersionList.OrderBy(p => p.Description); 

任何幫助將不勝感激。

+1

是什麼問題? – Tigran

+1

我不確定我是否完全理解你的要求,尤其是關於數據庫(?)訪問。但是,如果您想按多個條件排序,則可以使用[ThenBy](http://msdn.microsoft.com/zh-cn/library/bb534743.aspx)LINQ方法。所以你應該有'LoanOptionsProgramVersionList.OrderByDescending(p => p.ProgramVersionConfigured == true)。ThenBy(p => p.Description)。ThenBy(p => p.Code);' –

+0

爲什麼不直接使用排序列表,並且在ProgramVersionRecord中實現IComparable或將IComparer傳遞給排序列表的構造函數? –

回答

4

使用ThenBy

IOrderedEnumerable<ProgramVersionRecord> orderedList = LoanOptionsProgramVersionList 
    .OrderByDescending(p => p.ProgramVersionConfigured) // configured has priority 
    .ThenBy(p => p.Description) 
    .ThenBy(p => p.Code); 
+0

感謝它爲我工作。 – user2500796

1

ProgramVersionConfigured財產使用該屬性,而不是與布爾比較的結果排序。也可用ThenBy添加另一個排序:

LoanOptionsProgramVersionList.OrderByDescending(p => p.ProgramVersionConfigured) 
           .ThenBy(p => p.Description) 
           .ThenBy(p => p.Code) 
+0

我認爲'OrderByDescending'是正確的,至少這意味着配置的程序具有最高的優先級(我記住這個技巧:'true = 1'和'false = 0')。 –

+0

同意你的意見。和+1擊敗我10秒:) –