#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