我们如何使用dataLoader实现多对多?
假设我想获取具有这些联系人的公司(一个联系人可以有多个公司)。我有一个companyLinks作为中间表(带有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;
});
}但是,如果一个联系人有一个以上的公司怎么办?我如何知道正确的companyId?
发布于 2020-04-06 07:05:09
感谢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);
}https://stackoverflow.com/questions/60877199
复制相似问题