Напишите оператор ядра ef, который преформирует счет на SQL

Почему .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 или это какая-то ошибка?

Привет, можешь показать весь запрос? Я подозреваю, что здесь задействована какая-то операция GroupBy, потому что это всего лишь запрос простой таблицы (DbSet), он будет работать.

Ivan Stoev 13.03.2019 14:10

@IvanStoev, приношу извинения, это действительно предварительная форма SQL, у меня есть другие эффекты. Я отредактирую свой вопрос, как только это будет возможно.

adopilot 13.03.2019 14:14

@IvanStoev еще раз извините, я отредактировал свой вопрос, включая исходный оператор ef и новый tsql, который я пытаюсь отправить в SQL.

adopilot 13.03.2019 14:19

Без проблем. Но даже с последним обновлением он должен переводиться в SQL. Что такое f.Iznos? Обнуляемый тип? Что если выбрать только x.Count() (закомментировать , inkas = x.Sum(f => f.Iznos.Value))?

Ivan Stoev 13.03.2019 14:29

@IvanStoev f.Iznos является десятичным? , Похоже, что когда я не включил .Value в x.Sum(), ef действительно преформирует группу SQL. Я использовал .Value, потому что моя другая модель PosBlagajnik не была нулевой.

adopilot 13.03.2019 14:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема на самом деле в выражении

x.Sum(f => f.Iznos.Value)

В настоящее время EF Core преобразует в SQL только агрегированные методы с простыми селекторами доступа к свойствам.

Проблема может быть решена с помощью ?? оператора за пределами агрегатной функции:

x.Sum(f => f.Iznos) ?? 0

Другие вопросы по теме