Как получить отдельные строки на основе столбца при объединении в рамках сущности? - PullRequest
1 голос
/ 02 мая 2019

Я хочу объединить 2 таблицы и извлечь отдельные строки на основе 2 столбцов в структуре сущностей.

Я читал сообщения в Интернете, включая SO.

В приведенном ниже коде,
1. Я присоединяюсь к 2 таблицам на основе CurrentTurnID ключ
2. Я фильтрую таблицу по функциям, которые мне нужны
3. Я фильтрую таблицу, устанавливая условия для выбранных функций
4. Я выбираю столбец, чтобы вычислить сумму всех его значений

Мне нужно получить записи, которые имеют один и тот же CurrentTurnID только один раз. Вот мой код:

int services = Convert.ToInt32(database.Tbl_CurrentTurn.AsNoTracking()
            .Join(database.Tbl_pay.AsNoTracking(), f => f.CurrentTurnID,
               s => s.CurrentTurnID, (f, s) => new
               {
                   f.CurrentTurnOfficialID,
                   f.CurrentTurnID,
                   f.SickID,
                   f.Remove,
                   f.Payment,
                   f.ServicePayment,
                   s.isDeposit
               })
            .Where(w => w.SickID == SickId && w.Remove != true && w.Payment == true && w.isDeposit != true)
            .Select(s => s.ServicePayment).DefaultIfEmpty(0).Sum());

Если я добавлю Distinct() после оператора Select(), он будет рассматривать ServicePayment для фильтрации отдельных строк.

Обновление: Изображение прикреплено к моей Dropbox. 2-я и 3-я записи имеют одинаковое значение CurrentTurnID. Поэтому я хочу рассмотреть только один из них. Затем суммируйте записи в столбце ServicePayment. Обратите внимание, что в этих двух записях другие столбцы отличаются.

1 Ответ

0 голосов
/ 02 мая 2019

Вы можете попробовать GroupJoin, чтобы получить эту информацию без необходимости Distinct, например:

int services = Convert.ToInt32(database.Tbl_CurrentTurn.AsNoTracking()
        .GroupJoin(database.Tbl_pay.AsNoTracking(), f => f.CurrentTurnID,
           s => s.CurrentTurnID, (f, s) => new {f, s})
         .SelectMany(x=> x.s.DefaultIfEmpty(), (f, s) => new
           {
               f.CurrentTurnOfficialID,
               f.CurrentTurnID,
               f.SickID,
               f.Remove,
               f.Payment,
               ServicePayment = s != null ? s.ServicePayment : 0,
               s.isDeposit
           })
        .Where(w => w.SickID == SickId && w.Remove != true && w.Payment == true 
               && w.isDeposit != true)
        .Select(x=> x.ServicePayment).Sum());

Это может не скомпилироваться правильно, так как у меня нет всех переменных и небольшой пример, который я могу использовать для проверки этого.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...