简体   繁体   English

Linq-通过收集来重复记录

[英]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 | 组织1 | Storage1 储存1

Organization1 | 组织1 | Storage2 存储2

Organization1 | 组织1 | Storage3 储存3

Organization1 | 组织1 | Storage4 收纳4

Organization2 | 组织2 | Storage1 储存1

Organization2 | 组织2 | Storage2 存储2

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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