Работая в .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#
Место общения программистов C#
1751288204
Anonymous
Работая в .net 8, я создаю метод в своем классе репозитория, который принимает объект, называемый критериями и запросит EF на основе условий в этом объекте. Критерии способны генерировать выражение, которое затем передается методу разгибания where () для запроса. Проблема заключается в том, что для конкретного дерева выражения я получаю исключение, что [b] не происходит [/b], если я предоставляю то же выражение, что и код. /> Исключение, которое это создает: «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>
Я сравнил запросываемые объекты из двух примеров в отладчике и не обнаружил различий между ними. [b] не происходит [/b]. Я предполагаю, что это потому, что EF кэшировал первый (успешный) запрос и больше не пытается запрашивать второй. К сожалению, он не может сделать то, на что я надеялся. Это облегчает построение выражения верхнего уровня, которое представляет собой серию логических и не делает ничего для создания фактических условных выражений, что является здесь сложной частью. Мне нужно иметь возможность принимать динамические названия, значения и операторов динамических свойств и составлять их вместе, поэтому похоже, что API выражения все еще остается единственным способом.>
Подробнее здесь: [url]https://stackoverflow.com/questions/78497185/ef-error-the-linq-expression-could-not-be-translated-occurs-with-generated-exp[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия