首页 > 解决方案 > 如何将列表的 2 项分组到另一个列表中

问题描述

至于这个例子:

获取 List 中不同值的列表

这演示了如何根据 1 个项目获取不同的列表。

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

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

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

一个人的答案是:

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

标签: c#linq

解决方案


正如 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>


推荐阅读