【问题标题】:group by and merge some field result in linq分组并合并一些字段结果到linq
【发布时间】:2019-12-14 13:30:50
【问题描述】:

我有一门课

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

现在我有了这个类的列表:List<Person> persons;

var persons = new List<Person> {
            new Person { Id = 1, LastName = "Reza", FirstName="Jenabi" },
            new Person { Id = 1, LastName = "Amin", FirstName="Golmahalle"},
            new Person { Id = 2, LastName = "Hamed", FirstName="Naeemaei"}
        };

有没有办法可以按Id 分组并获取所有全名的列表(组合名字和姓氏)?

所以分组后:

var Id = results[0].Id; // Output : 1
List<string> fullNames = results[0].FullNames; // Output : "Reza Jenabi","Amin Golmahalle"

【问题讨论】:

  • persons.GroupBy(x =&gt; x.Id).Select(x =&gt; String.Join(", ", x.Select(a =&gt; $"{a.FirstName} {a.LastName}"));
  • @FarhadJabiyev:我会得到全名列表

标签: c# .net linq group-by


【解决方案1】:

我相信这就是你所需要的:

var results = persons.GroupBy(x => x.Id)
    .Select(x => new { Id = x.Key, FullNames = x.Select(p => $"{p.FirstName} {p.LastName}").ToList() })
    .ToList();

【讨论】:

    【解决方案2】:

    我认为下面的代码可以帮助你:

    var fff = from p in persons
            group $"{p.FirstName} {p.LastName}" by p.Id into g
            select new { PersonId = g.Key, FullNames = g.ToList() };
    

    【讨论】:

      【解决方案3】:

      是的,您可以使用GroupByJoin 这些项目:

      var grouped = persons.GroupBy(p => p.Id)
          .Select(s => string.Join(", ", s.Select(a=> $"{a.FirstName} {a.LastName}")));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-30
        • 1970-01-01
        • 2022-12-06
        • 1970-01-01
        相关资源
        最近更新 更多