Работая в .net 8, я создаю метод в своем классе репозитория, который принимает объект, называемый критериями и запросит EF на основе условий в этом объекте. Критерии способны генерировать выражение, которое затем передается методу разгибания where () для запроса. Проблема заключается в том, что для конкретного дерева выражения я получаю исключение, что не происходит , если я предоставляю то же выражение, что и код. /> Исключение, которое это создает: «System.InvalidoPerationException: 'Expression' y 'y' не может быть переведено. Либо переписывайте запрос в форме, которую можно перевести, либо явно переключив клиентскую оценку. Найдите это исключение неясным, потому что оно жалуется на «Y», который является параметром для вложенной лямбды. Я не могу представить, что может быть не так с этой частью выражения. < /P>
public async Task GetByCriteria(ICriteria criteria)
{
// Using an expression in code
var test = _dbContext.Set()
.Where(x => x.UserRoles.Any(y => y.RoleNo == 100101)).AsNoTracking();
List codeEntities = await test.ToListAsync();
< /code>
Работает вышеуказанный код. Здесь я использую кодированное выражение в вызове where () < /p>
public async Task GetByCriteria(ICriteria criteria)
{
Expression expression = criteria.AsExpression();
// Using a generated expression
var queryable = _dbContext.Set()
.Where(expression).AsNoTracking();
List exprEntities = await queryable.ToListAsync();
< /code>
Этот код создает исключение, когда называется tolistasync (). Переменная Expression является выражением, которое было сгенерировано объектом Criteria. В представлении отладки я вижу, что это выражение совпадает с тем, что в коде из до начала. Это не имеет значения. < /P>
Я сравнил запросываемые объекты из двух примеров в отладчике и не обнаружил различий между ними. не происходит . Я предполагаю, что это потому, что EF кэшировал первый (успешный) запрос и больше не пытается запрашивать второй. К сожалению, он не может сделать то, на что я надеялся. Это облегчает построение выражения верхнего уровня, которое представляет собой серию логических и не делает ничего для создания фактических условных выражений, что является здесь сложной частью. Мне нужно иметь возможность принимать динамические названия, значения и операторов динамических свойств и составлять их вместе, поэтому похоже, что API выражения все еще остается единственным способом.>
Подробнее здесь: https://stackoverflow.com/questions/784 ... erated-exp
Ошибка EF: выражение LINQ не может быть переведено. Происходит с сгенерированным выражением, а не с кодом ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
«Выражение LINQ не может быть переведено» с сравнением DateTime в запросе LINQ?
Anonymous » » в форуме C# - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-