Как добавить несколько условий в предложение On с помощью Entity Framework Core

#c# #linq-to-sql #entity-framework-core

#c# #linq-to-sql #entity-framework-core

Вопрос:

Будучи таблицей базы данных A, B и AB (AB — это связь «многие ко многим» между таблицами A и B) и Entity Frameworc Core имея в контексте базы данных только таблицы A и B, объявленные как DbSet , как я могу выполнить следующий sql statment, используя LINQ to SQL

 SELECT A.Id, A.Name
FROM A
LEFT JOIN AB ON AB.AId = A.Id AND AB.BId = @myVariable
WHERE AB.AId IS NULL
  

Следующее LINQ

 var result = (from a in _context.A
              from t in a.ABs
                  .DefaultIfEmpty()
                  .Where(x => x.BId == @variable)
              where t == null
              select a)
return result.ToListAsync();
  

Генерирует следующее SQL

 SELECT [a].[Id], [a].[Name]
FROM [A] AS [a]
LEFT JOIN (
     SELECT [ab].[AId], [ab].[BId]
     FROM [AB] AS [ab]
     WHERE [ab].[BId] = @__variable_0
) AS [t] ON [i].[Id] = [t].[AId]
WHERE [t].[BId] IS NULL
  

Как я могу обновить свой LINQ , чтобы избежать оператора подзапроса, без добавления таблицы AB в качестве DbSet свойства в Entity Framework контексте?

Комментарии:

1. Это все еще не исправленная «функция» github.com/dotnet/efcore/issues/17622