2011-08-07 148 views
1

我有List<Foo>。 Foo類包含一個Type屬性。 Type屬性是一個枚舉。將列表中的元素分類到另一個分類

public enum Type 
    { 
     Arithmetic, Fraction, ... 
    } 


    public class Foo 
    { 
     public Type ProblemType 
     { 
      get; set; 
     } 
    } 

我想產生它是由ProblemType排序的另一份名單,而且每一個包含屬於同一類型的Foo clases。我可以想象我應該使用Enumerable,但我不知道如何使用它們。

在此先感謝

+1

所以你想要一個列表列表,其中每個內部列表包含'Foo'具有相同的'ProblemType'? – svick

回答

2

您可以使用GroupBy()做到這一點:

List<List<Foo>> groupedLists 
    = yourList.GroupBy(foo => foo.ProblemType) 
       .OrderBy(group => group.Key) 
       .Select(group => group.ToList()) 
       .ToList(); 

順帶一提,我建議不要使用Type作爲枚舉的名稱,進入名稱衝突與System.Type通常不是一個好主意。您甚至可以將其命名爲ProblemType,因爲編寫public ProblemType ProblemType { get; set; }是明確的。

+1

如果您先訂購然後選擇,則可以使用分組的「Key」屬性。我認爲它比使用First()更清晰。 – svick

+0

@svick,你是對的。回答相應更新,謝謝:) –

+0

謝謝Fréderic。這是我正在尋找的 –

1

要按ProblemType,你可以試試這個

var sortedFooList = fooList.OrderBy(f => f.ProblemType); 

sortedFooListIOrderedEnumerable<Foo>。如果您想要List<Foo>,只需在致電OrderBy()後添加.ToList()即可。

0

假設你已經有一個List<Foo>,就可以查詢該列表由ProblemType提供的有序集合:

List<Foo> myFoos = GetFooList(); 

var sortedFoos = myFoos.OrderBy(f => f.ProblemType); 

sortedFoos是枚舉集由Foo.ProblemType排序。

相關問題