Я создаю запросы LINQ динамически. Я использую EF Core 3.1.6 (для SQL Server).
Я создаю IQueryable
с предложением where()
, используя предикат.
EF Core может переводить следующее выражение предиката, и запрос работает должным образом:
{p => ((p.Address != null) AndAlso p.Address.Contains(Convert("6152 Fames Ro", String)))}
Но EF Core не может перевести следующее выражение предиката:
{p => (((p.FirstName != null) AndAlso p.FirstName.Contains(Convert("fred", String))) OrElse ((p.MiddleName != null) AndAlso p.MiddleName.Contains(Convert("fred", String))))}
Это вызывает следующее исключение:
Выражение LINQ 'DbSet \ r \ n .Where (p = ›p.FirstName! = Null && p.FirstName.Contains (fred) || p.MiddleName! = Null && p.MiddleName.Contains (fred))' могло не переводится. Либо перепишите запрос в форме, которая может быть переведена, либо явно переключитесь на оценку клиента, вставив вызов AsEnumerable (), AsAsyncEnumerable (), ToList () или ToListAsync (). См. https://go.microsoft.com/fwlink/?linkid=2101038. для дополнительной информации.
Я рассмотрел следующие вопросы:
- EF Linq Ошибка после перехода с dotnet Core 2.2.6 на 3.0.0
- https://entityframeworkcore.com/knowledge-base/58166970/migrating-from-ef-core-2-to-ef-core-3
Как было предложено в сообщении об исключении, я попытался выполнить AsEnumerable()
, ToList()
и т. Д. На последнем IQueryable
, но это не сработало. Я думаю, это исключит проблему оценки клиента.
Я уверен, что что-то делаю не так; не уверен что.
Может кто поможет? Если потребуется, могу предоставить дополнительную информацию.