Martin
Martin

Reputation: 445

Linq - Duplication of records by their collection

Lets say my model looks something like this.

public class OrganizationDTO
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<StorageDTO> Storages { get; set; } = new List<StorageDTO>();
}

public class StorageDTO
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<OrganizationDTO> Organizations { get; set; } = new List<OrganizationDTO>();
}

Organization may have multiple storages, so basically I want to duplicate organization per storage in my table. I want to show in table records like below

Organization1 | Storage1

Organization1 | Storage2

Organization1 | Storage3

Organization1 | Storage4

Organization2 | Storage1

Organization2 | Storage2

I tried to group them by Storage collection but it didnt duplicate my records like I want.

 var result = Context.Storages
    .SelectMany(org => org.Organizations)
    .GroupBy(org => org)
    .Select(grouping => grouping.FirstOrDefault())
    .OrderBy(org => org.Name)
    .ProjectTo<SomeDTO>();

Upvotes: 0

Views: 51

Answers (2)

Evgeny Gorbovoy
Evgeny Gorbovoy

Reputation: 773

            var result = Context.Organizations
            .SelectMany(organizationDTO =>organizationDTO
                .Storages
                .Select(storage => 
                    new {organizationDTO, storage}));

Upvotes: 2

Amy B
Amy B

Reputation: 110111

Looks like you just want to flatten the relationship.

var query =
  from storage in Context.Storages
  from org in storage.Organizations
  select new {Storage = storage, Organization = org };

var result = query
  .OrderBy(row => row.Organization.Name)
  .ProjectTo<SomeDTO>();

Upvotes: 3

Related Questions