多对多在 graphql-dotnet 中使用 dataLoader

Many to many with dataLoader in graphql-dotnet

dataLoader如何实现多对多?

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

当一家公司只有 1 个联系人时,我有这个可以使用:

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?

感谢 sungram3r 的提示。 解决办法是从加入-table.

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