Я переместил свое приложение с dotnet 2.2 на 3.0. Я решил большие и маленькие проблемы, но запросы LINQ, которые я написал на уровне обслуживания, терпят неудачу.
Например, этот метод (и запрос linq) не работает:
public async Task<IList<PersonnelDto>> PersonnelChart(short year)
{
var result = await uow.Repository<Personnel>().Query()
.Where(x => !x.IsOpen)
.Include(i => i.CurrentMoney)
.GroupBy(gp => new { id = gp.CurrencyType})
.Select(s => new PersonnelChartDto
{
PersonnelId = s.Key.id,
PersonnelCode = s.Key.code,
PersonnelName = s.Key.name,
PersonnelCount = s.Count(),
SavingTotal = Math.Round(s.Sum(sm => sm.CurrentMoney
.Where(x => !x.IsDeleted)
.Select(ss => ss.SavingTotal)
.DefaultIfEmpty(0)
.Sum()), 2),
})
.ToListAsync();
return result;
}
При запуске этого метода EF Core выдает эту ошибку:
System.InvalidOperationException: обработка выражения LINQ «AsQueryable ((Необработанный параметр: sm) .CurrentMoney)» с помощью «NavigationExpandingExpressionVisitor» завершилась неудачно. Это может указывать на ошибку или ограничение в EF Core.
Итак, как я могу исправить эту ошибку?
Math.Round
доставляет вам проблемы. Без этого работает? - person DavidG   schedule 03.12.2019collection.Any() ? collection.Sum(ss => ss.SavingTotal) : 0
- person wondra   schedule 09.06.2020