У меня есть ASP.Net Core API, который должен работать как с Sql Server, так и с Sqlite-соединением в зависимости от настроек клиента.У меня есть несколько случаев в моем приложении, где я делаю левые внешние соединения с Linq.Я основал эти левые внешние соединения на ответе Стефана Штайгера в на этот вопрос .
Запросы выполняются очень хорошо при подключении к Sql Server, однако при запуске в Sqlite я получаю предупреждение о том, что запрос будет оцениваться локально, и заметное снижение производительности.
Например,учитывая следующий сценарий, где у меня есть запись Ord, с которой может быть связана активная запись Odt.У меня есть запрос, который выглядит следующим образом:
var test = await (from order in _context.Ord.AsNoTracking()
from activeOdt in _context.Odt.AsNoTracking()
.Where(x => x.Active)
.DefaultIfEmpty()
select new { order, activeOdt }
).ToListAsync();
Только в Sqlite, я получаю следующее предупреждение:
warn: Microsoft.EntityFrameworkCore.Query [20500] Выражение LINQ'из Odt activeOdt в {из Odt x в значении (Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1 [Smart.Common.Odt]), где (([x] .OrdId == [order] .Id) И также] .Active) select [x] => DefaultIfEmpty ()} 'не удалось перевести и будет оцениваться локально.
Я как-то неправильно пишу этот запрос?Нужно ли обрабатывать это по-другому в Sqlite, или это, возможно, какое-то ограничение Sqlite в Entity Framework?