将List <T>转换为包含另一个List <T>的另一个List <T>

nav*_*8tr 8 c# linq asp.net-mvc

我有一个Foo列表:

class Foo {
    public int Id { get; set; }
    public String Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想将其转换为列表栏:

class Bar {
    public int Id { get; set }
    public List<String> NameList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Foo中的数据如下所示:

Id     Name
-----------
1      Foo1
1      Foo2
1      Foo3
2      Foo3
2      Foo2
2      Foo1
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样:

Id      NameList
----------------
1      Foo1
       Foo2
       Foo3
2      Foo3
       Foo2
       Foo1
Run Code Online (Sandbox Code Playgroud)

我这样做是为了更容易在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>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试了以下Linq代码,但它没有用

BarList = FooList.Select(x => new Bar() {
    Id = x.Id,
    NameList = x.Select(y => y.)
}).ToList();
Run Code Online (Sandbox Code Playgroud)

M.k*_*ary 9

使用GroupBy.

List<Bar> BarList = FooList.GroupBy(f => f.Id, f => f.Name, (id, names) => new Bar
{
    Id = id,
    NameList = names.ToList()
}).ToList();
Run Code Online (Sandbox Code Playgroud)