Подробная таблица sum в запросе linq
Привет друзья,
У меня есть три таблицы это следующие
VisitDetails
VisitId visitCode visitDate 1 V001 15-12-2015
PatientBill
PatientBillId VisitID BillCode PatientPayable CompanyPayable 1 1 B001 100 50 2 1 B002 80 40
PatientBillDetails
PBillDetailsId PatientBIllId Gross Discount NetPayable 1 1 100 25 75 2 1 100 25 75 3 2 80 20 60 4 2 80 20 60
Я хочу такую запись
Первый Выход
VisitCode PatientPayable CompanyPayable NetPayable V001 180 90 270
второй выход
VisitCode BillCode PatientPayable CompanyPayable NetPayable V001 B001 100 50 150 V001 B002 80 40 120
Примечание: - есть некоторые критерии, поэтому я не могу добавить PatientPayable и CompanyPayable сумму для NetPayable. Каждый раз нетто-платежная сумма должна поступать от PatientBillDetails.
Что я уже пробовал:
var result= from VD in VisitDetails join PB in PatientBill on VD.VisitId equal PB.VisitId join PBD in PatientBillDetails on PB.PatientBillId equal PBD.PatientBillId group new { PB.PatientPayable, PB.CompanyPayable, PBD.NetPayable } by new { VD.VisitCode } into data select new { VisitCode= data.Key.VisitCode, PatientPayable= data.sum(x=> x.PatientPayable), CompanyPayable= data.sum(x=> x.CompanyPayable), NeyPayable= data.sum(x=> x.NetPayable) }
Теперь мой выход таков
VisitCode PatientPayable ComapanyPayable NetPayable V001 360 180 270
Но я хочу получить такой результат
VisitCode PatientPayable ComapanyPayable NetPayable V001 180 90 270
Jon McKee
Разве это не намеренное поведение? У вас есть несколько записей для деталей счета, поэтому объединение их в счет пациента приведет к результату {PB1, PBD1}, {PB1, PBD2}, {PB2, PBD3}, {PB2, PBD4}
для каждой детали: пары купюр. Если нет, то я не уверен, какова цель множественного PatientBillDetails
записи есть. Если бы вы могли уточнить, что я могу быть в состоянии помочь :)
Shambhoo kumar
Позвольте мне объяснить сценарий: для одного пациента мы можем создать несколько визитов, и для каждого визита мы можем создать несколько счетов пациента, и для каждого счета пациента мы можем создать несколько деталей счета.
Jon McKee
Ах. Если я не знаю, какова цель нескольких деталей счета, я действительно не могу помочь. Вы выбираете самую низкую из возможных деталей счета? Самый высокий? Средний? Если вы не выберете один или не используете алгоритм для объединения их в одно значение, вы всегда получите несколько группировок.
Shambhoo kumar
Ниже Linq запрос работает нормально, но это очень медленно, пожалуйста, помогите мне улучшить этот запрос
var result= from VD in VisitDetails
присоединяйтесь к ПБ в PatientBill на ВД.VisitId равной ПБ.VisitId
группа новая
{
ПБ
}
по новому
{
ВД.VisitCode
}
в данные
выберите новый
{
VisitCode= data. Key.VisitCode,
PatientPayable= сведения.сумма(х=> У Х.ПБ.PatientPayable),
CompanyPayable= data. sum(x=> x. PB.CompanyPayable),
NeyPayable= сведения.Сумма(товар=&ГТ; пункт.ПБ.PatientBillDetails.Сумма(х=> У Х.NetPayable))
}
Jon McKee
Вам не нужно создавать анонимный тип для одного из них.
группа PB по VD. VisitCode в данные
это позволило бы избежать выделения нового типа PB times для каждой группы VD. VisitCode.
Shambhoo kumar
можете ли вы дать вам предложенный запрос?
Jon McKee
Честно говоря, не могу. Несколько PBD производят несколько группировок с соединением VD и PB (или соединение PBD и PB с VD). Если нет способа фильтровать PBD на основе некоторых критериев, у вас всегда будет эта проблема. Приведенный выше пример кода, который игнорирует PBD, имеет оптимизацию (предотвращающую выделение ненужных объектов), но я не уверен, что он выполняет то, что вы хотите. Простым решением было бы разделить результат на 2, но если PBD не равны, то это решение не работает. У меня просто недостаточно информации о цели этой задачи, чтобы дать вам адекватный ответ помимо того, что у меня уже есть :(
Shambhoo kumar
Все в порядке, Макки, спасибо, что уделили мне время. Я очень ценю ваши усилия и время. :)