2016-01-13 83 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();