0

我们如何使用 dataLoader 实现多对多?

可以说我想获取有联系人的公司(一个联系人可以有多个公司)。我有一个 companyLinks 作为 midde 表(带有 companyId/contactId)。

当公司只有一个联系人时,我有这个工作:

public async Task<ILookup<Guid, Contact>> GetContactsFromCompanyBatchAsync(IEnumerable<Guid> companyIds)    
{
  var contacts = _entities.Include(c => c.CompanyLinks).Where(contact => contact.CompanyLinks.Any(cl => companyIds.Contains(cl.CompanyId)));
  return contacts.ToLookup(cont => {
       var res = cont.CompanyLinks.Any() ? cont.CompanyLinks.ElementAt(0).CompanyId : Guid.Empty;
       return res;
  });
}

但是,如果一个联系人拥有超过 1 家公司怎么办?我怎么知道正确的 companyId ?

4

1 回答 1

0

感谢 sungram3r 的提示。解决方案是从连接表开始。

public async Task<ILookup<Guid, Contact>> GetContactsFromCompanyBatchCollectionAsync(IEnumerable<Guid> companyIds)
    {
        var companyContacts = _salesNoteContext.CompanyContact
           .Where(contactCompany => companyIds.Contains(contactCompany.CompanyId))
           .Include(contactCompany => contactCompany.Company);
        return companyContacts.ToLookup(contactCompany => contactCompany.CompanyId, contactCompany => contactCompany.Contact);
    }
于 2020-04-05T23:05:09.117 回答