如何将一个列表的2个项目分组到另一个列表中

时间:2019-03-29 17:13:36

标签: c# linq

对于此示例:

Get a list of distinct values in List

这演示了如何基于一项获得不同的列表。

您如何获得两件事的独特清单。说作者和标题。

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

List<Note> Notes = new List<Note>();

一个答案是:

Notes.Select(x => x.Author).Distinct();

1 个答案:

答案 0 :(得分:1)

正如jdweng在评论中建议的,您可以执行以下操作:

Notes.Select(x => new string[] {x.Title, x.Author}).Distinct();

这将返回一个IEnumerable<string[]>

另一个选择是创建一个要选择的类:

public class NoteSummary()
{
    public string Title { get; set; }
    public string Author { get; set; }

    public NoteSummary(string title, string author)
    {
        Title = title;
        Author = author;
    }
}

然后linq变为:

Notes.Select(x => new NoteSummary(x.Title, x.Author)).Distinct();

返回IEnumerable<NoteSummary>

如果您要返回原始Note类/实体的分组集合,则可以使用GroupBy

Notes
  .GroupBy(g => new { g.Title, g.Author })  // group by fields
  .Select(g => g.First());                  // select first group

返回IEnumerable<Note>