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

8

我有一个Foo列表:

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

我想把它转换成一个列表Bar:

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/zh-cn/library/bb545971.aspx - Bradley Uffner
你绝对需要使用 GroupBy。但是你可能需要澄清你期望的输出,因为它并没有太多意义。 - Jonesopolis
糟糕!我一开始误解了问题。无论如何,这里有一个“GroupsOf”的实现:http://ideone.com/Z4mNWp - Billy ONeal
1个回答

9

使用 GroupBy

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接