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