2016-01-13 80 views
8

我有富的清單另一個列表 轉換列表<T>到包含另一個列表<T>

class Foo { 
    public int Id { get; set; } 
    public String Name { get; set; } 
} 

我想將它轉化成一個列表吧:

class Bar { 
    public int Id { get; set } 
    public List<String> NameList { get; set; } 
} 

中的數據Foo看起來像這樣:

Id  Name 
----------- 
1  Foo1 
1  Foo2 
1  Foo3 
2  Foo3 
2  Foo2 
2  Foo1 

我希望它看起來像這樣:

Id  NameList 
---------------- 
1  Foo1 
     Foo2 
     Foo3 
2  Foo3 
     Foo2 
     Foo1 

我這樣做,所以它會更容易顯示在Razor呈現的Html無序列表中。 另外,如果有一個簡單的方法來做到這一點沒有轉換,請讓我知道。

最終,我會顯示HTML這樣的:

<li>1 
    <ul> 
     <li>Foo1</li> 
     <li>Foo2</li> 
     <li>Foo3</li> 
    </ul> 
</li> 
<li>2 
    <ul> 
     <li>Foo3</li> 
     <li>Foo2</li> 
     <li>Foo1</li> 
    </ul> 
</li> 

到目前爲止,我已經試過以下的Linq代碼,但它沒有工作

BarList = FooList.Select(x => new Bar() { 
    Id = x.Id, 
    NameList = x.Select(y => y.) 
}).ToList(); 
+1

查看LINQ的'GroupBy'語句,它正是這樣。 https://msdn.microsoft.com/en-us/library/bb545971.aspx –

+0

你絕對需要'GroupBy'。但是你可能想澄清你的預期輸出,這並不合理。 – Jonesopolis

+0

哎呀!起初我誤解了這個問題。無論如何都有一個「GroupsOf」實現:http://ideone.com/Z4mNWp –

回答

9

使用GroupBy

List<Bar> BarList = FooList.GroupBy(f => f.Id, f => f.Name, (id, names) => new Bar 
{ 
    Id = id, 
    NameList = names.ToList() 
}).ToList(); 
相關問題