Group by in LINQ

后端 未结 10 1803
悲哀的现实
悲哀的现实 2020-11-21 06:58

Let\'s suppose if we have a class like:

class Person { 
    internal int PersonID; 
    internal string car; 
}

I have a list of this class

10条回答
  •  既然无缘
    2020-11-21 07:29

    The following example uses the GroupBy method to return objects that are grouped by PersonID.

    var results = persons.GroupBy(x => x.PersonID)
                  .Select(x => (PersonID: x.Key, Cars: x.Select(p => p.car).ToList())
                  ).ToList();
    

    Or

     var results = persons.GroupBy(
                   person => person.PersonID,
                   (key, groupPerson) => (PersonID: key, Cars: groupPerson.Select(x => x.car).ToList()));
    

    Or

     var results = from person in persons
                   group person by person.PersonID into groupPerson
                   select (PersonID: groupPerson.Key, Cars: groupPerson.Select(x => x.car).ToList());
    

    Or you can use ToLookup, Basically ToLookup uses EqualityComparer.Default to compare keys and do what you should do manually when using group by and to dictionary. i think it's excuted inmemory

     ILookup results = persons.ToLookup(
                person => person.PersonID,
                person => person.car);
    

提交回复
热议问题