Сравнение десятичных знаков в LINQ - PullRequest
1 голос
/ 18 июня 2020
• 1000

InvalidOperationException: выражение LINQ 'DbSet .Where (o => o.SalesValue> = 10000.00)' не может быть переведено.

и это не фильтруется вообще

Decimal value = new Decimal(10000);
Where(x => Decimal.Compare(x.SalesValue, value) >= 0);

Как отфильтровать десятичный столбец?

1 Ответ

0 голосов
/ 18 июня 2020

Если вы продолжите go до ошибки, у вас должна быть ссылка на Microsoft, чтобы указать точную причину ошибки! В моем случае, когда я попробовал ваш код, я получил следующее: exception.

'The LINQ expression' Where (источник: DbSet, predicate: (v) => v.SalesValue> = 10000.00) 'не может быть переведено. Либо перепишите запрос в форме, которая может быть переведена, либо явно переключитесь на оценку клиента, вставив вызов либо AsEnumerable (), AsAsyncEnumerable (), ToList (), либо ToListAsyn c (). См. https://go.microsoft.com/fwlink/?linkid=2101038 для получения дополнительной информации. '

Если мы go перейдем по ссылке и исследуем Unsupported client evaluation по проблеме, с которой вы столкнулись!

Один подход был бы слишком полезным - Explicit client evaluation что-то вроде ниже, если у вас небольшой объем данных:

var orders = _context.Values.AsEnumerable().Where(x => x.SalesValue >= 10000.00M).ToList();

Есть некоторые другие соображения, которые вы можете придется принимать в зависимости от ваших данных и бизнес-модели, которую вы можете получить по ссылке выше!

Как правило, Entity Framework Core пытается максимально точно оценить запрос на сервере . EF Core преобразует части запроса в параметры, которые он может оценить на стороне клиента. Остальная часть запроса (вместе со сгенерированными параметрами) передается поставщику базы данных для определения эквивалентного запроса к базе данных для оценки на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...