Pricey
Pricey

Reputation: 5929

Linq to Entities group query giving list of results in each group

If I have a set of entities with 3 properties (Id, Type, Size) all of which are strings.

Is there a way using Linq to Entities where I can do a group query which gives me the Size + Type as the key and then a list of the related Id's for that Size + Type?

Example below of getting the count:

Items.GroupBy(x => new { x.Size, x.Type})
     .Select(x => new { Key = x.Key, Count = x.Count() }) 

but I am looking to get a list of the Ids for each grouping?

I am looking to see if it is possible using Linq-to-EF before I decide to iterate through this in code and build up the result instead.

Upvotes: 2

Views: 5169

Answers (2)

Lucian
Lucian

Reputation: 894

Another way to build up a Dictionary<string, IEnumerable<string?>> in dotnet 6.0 according to the docs; where we have the dictionary Key as {Size, Type} and Value the list of Ids, you can write:

Dictionary<string, IEnumerable<string?>> result = Items.GroupBy(item => new { item.Size, item.Type }
                                                       item => item.Id),
                                                       (itemKey, itemIds) =>
                                                       {
                                                            Key = itemKey,
                                                            Ids = itemIds
                                                       })
                                              .ToDictionary(x => x.Key, x=> x.Ids);

Upvotes: 0

Habib
Habib

Reputation: 223257

If you want to get List of Ids for each group then you have to select x.Select(r => r.Id) like:

var result = Items.GroupBy(x => new { x.Size, x.Type })
                  .Select(x => new
                    {
                        Key = x.Key,
                        Ids = x.Select(r => r.Id)
                    });

Upvotes: 8

Related Questions