获取linq查询中的对象列表列表

时间:2014-04-24 18:39:26

标签: c# linq list

有没有办法查询对象列表,对它们进行分组,然后将它们作为列表列表输出为自己的列表?我不知道如何解释,所以我会告诉你。

public class Note
{
    string CreatorID;
    string Title;
    string Text;
}

我有一个填充的备注列表(List<Note> noteList)。每个创作者都有多个创作者和多个笔记。我试图弄清楚是否有一种方法使用LINQ查询按照CreatorID对笔记进行分组,然后将它们分开并将它们作为一系列笔记列表(List<List<Note>> creatorsNotes)输出。通过这种方式,我可以循环创建者注释以获取创建者及其笔记列表。

2 个答案:

答案 0 :(得分:6)

最简单的方法是使用ToLookup

var groups = noteList.ToLookup(n => n.CreatorID);

foreach(var group in groups)
{
    Console.WriteLine("Items with CreatorID {0}", group.Key);
    foreach(var item in group)
          Console.WriteLine("   Title: {0}", item.Title);
}

如果需要,您还可以使用GroupBy。但请注意,这些不会直接创建List<List<Note>>。如果需要,您可以这样做:

List<List<Note>> grouped = noteList.GroupBy(n => n.CreatorID)
                                   .Select(g => g.ToList()) 
                                   .ToList();

答案 1 :(得分:0)

当然,让list成为List<Note>

var creatorNotes = list
    .GroupBy(note => note.CreatorID)
    .Select(g => new
    {
        g.CreatorID,
        Notes = g.ToList()
    })
    .ToList();

正如Reed所指出的,这是一个匿名类型列表,表示根目录中的分组CreatorID以及与Notes相关联的CreatorID