2011-06-16 51 views
0

我需要以邏輯順序表示不同類型的文檔。 所以我有一個ID對象列表。我需要做一個比較器,通過「手動」規則來排序這些對象。按ID排序必須是2,32,5,12,8,43 ...等等。如何以邏輯順序表示不同類型的文檔

我使用LINQ

documents.OrderBy(doc=> doc.Id, new DocumentsComparer<int>()); 

public class DocumentsComparer<T> : IComparer<int> 
{ 
    ...???... 
} 

如何做出這樣的比較器?

回答

1
public class DocumentsComparer<T> : IComparer<int> 
{ 
    private List<int> order = new List<int>{2, 32, 5, 12, 8, 43}; 
    public int Compare(int x, int y) 
    { 
     return order.IndexOf(x).CompareTo(order.IndexOf(y)); 
    } 
} 

如果x和y可能超出您的已知列表,您必須添加檢查並處理這些情況。

+0

如果'order'列表很大,我建議使用Dictionary映射。 – leppie 2011-06-16 12:58:02

+0

它看起來不錯。但我無法運行此比較器。它不被linq查詢調用?我不懂爲什麼。我編輯了我的帖子。 – podeig 2011-06-16 13:13:25

+0

@podeig使用'orderby()'後,它不會立即被調用。這與'IEnumerable'的工作方式有關(延遲加載)。要測試它,你可以嘗試'documents.OrderBy(doc => doc.Id,new DocumentsComparer ())。ToList()'; – 2011-06-16 13:17:02