Почему .net core 2.2. если это
var posBlagajnik = rampa.Doc.Where(x => x.SmjenaId == smjena.Id && (x.DocTipNavigation.IsRacun || x.DocTipNavigation.IsStorno)).GroupBy(x => x.User.ImeIprezime)
.Select(x => new PosBlagajnik() { ime = x.Key, brojRacuna = x.Count(), inkas = x.Sum(f => f.Iznos.Value) }).ToList();
Преформируйте в памяти, но не в SQL.
Мой контекст предупреждает меня
The LINQ expression '"Count()"' could not be translated and will be evaluated locally.
Я хочу отправить в SQL что-то вроде этого.
select
AspNetUsers.ImeIprezime
,COUNt(*) as brojRacuna
,sum(iznos) as inkas
from doc
inner join AspNetUsers on doc.user_id=AspNetUsers.id
inner join dokumenti on doc.doc_tip=dokumenti.id
where doc.smjena_id=79 and (dokumenti.isRacun = 1 or dokumenti.isStorno=1)
group by AspNetUsers.ImeIprezime
Благодаря помощи @IvanStoev мне удалось написать ef, который объединяет prefom sql.
Вот новый вопрос в соответствии с исследованием
Когда я изменил свой запрос ef на
var posBlagajnik = rampa.Doc
.Where(x => x.SmjenaId == smjena.Id && (x.DocTipNavigation.IsRacun || x.DocTipNavigation.IsStorno))
.GroupBy(x => x.User.ImeIprezime)
.Select(x => new PosBlagajnik() { ime = x.Key, brojRacuna = x.Count(),
inkas = x.Sum(f => f.Iznos)
}).ToList();
Ef начать выполнять агрегацию sql.
В начале я использовал x.Sum(f => f.Iznos.Value), потому что f.Iznos имеет значение Nullable (десятичное?), а инки на ПосБлагайник не было Nullable . Используя .Value, я конвертировал десятичные числа? до десятичной.
Похоже, это сбивает с толку ef для локального формирования всего запроса.
Это обычно относится к ef или это какая-то ошибка?
@IvanStoev, приношу извинения, это действительно предварительная форма SQL, у меня есть другие эффекты. Я отредактирую свой вопрос, как только это будет возможно.
@IvanStoev еще раз извините, я отредактировал свой вопрос, включая исходный оператор ef и новый tsql, который я пытаюсь отправить в SQL.
Без проблем. Но даже с последним обновлением он должен переводиться в SQL. Что такое f.Iznos? Обнуляемый тип? Что если выбрать только x.Count() (закомментировать , inkas = x.Sum(f => f.Iznos.Value))?
@IvanStoev f.Iznos является десятичным? , Похоже, что когда я не включил .Value в x.Sum(), ef действительно преформирует группу SQL. Я использовал .Value, потому что моя другая модель PosBlagajnik не была нулевой.





Проблема на самом деле в выражении
x.Sum(f => f.Iznos.Value)
В настоящее время EF Core преобразует в SQL только агрегированные методы с простыми селекторами доступа к свойствам.
Проблема может быть решена с помощью ?? оператора за пределами агрегатной функции:
x.Sum(f => f.Iznos) ?? 0
Привет, можешь показать весь запрос? Я подозреваю, что здесь задействована какая-то операция
GroupBy, потому что это всего лишь запрос простой таблицы (DbSet), он будет работать.