Выражение LINQ - использование .Any в Select не может быть переведено - PullRequest
3 голосов
/ 09 мая 2020

Asp. net Core 3.1 LINQ Expression group by и select из таблицы, и я использую любой для select, но возникает ошибка.

Но он отлично работает в asp. net стандарт.

Код:

List<GetObj> liste = dbContext.testTable
          .Where(x => x.isActive == true).OrderByDescending(x => x.Id)
          .GroupBy(x => new { x.field1, x.field2 })
          .Select(x => new GetObj
          {
               field1 = x.Key.field1,
               field2 = x.Key.field2,
               totalQuantity = x.Sum(y => y.ldNet),
               isMaped = x.Any(y => y.isLastMove == true)
           }).ToList();

И полученная ошибка:

.Any(y => y.isLastMove == True)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). 

1 Ответ

2 голосов
/ 09 мая 2020

В настоящее время (EF Core 3.x) только проекция ключевых / скалярных агрегатов поддерживается для запросов GroupBy , а Any не попадает в эту категорию.

Немного необычно и не очень читабельно, но поскольку Any возвращает false, если все условия элементов равны false, а также true > false, Any можно заменить поддерживаемым Max агрегатом:

isMaped = x.Max(y => y.isLastMove)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...