简体   繁体   中英

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>();

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>();
            var result = Context.Organizations
            .SelectMany(organizationDTO =>organizationDTO
                .Storages
                .Select(storage => 
                    new {organizationDTO, storage}));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM