Linq groupby заказ и объединение - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть две таблицы «Назначения» и «Пациенты». Считайте, что они имеют данные следующим образом: Найдите схему БД в

attached image

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

from a in dbContext.Appointments
where a.doctorid == mydoctorid 
join p in dbContext.Patients on a.patientid equals p.patientid
order by p.name

updated code which led to exception

(from p in this.dbContext.Patients
join b in ( from a in this.dbContext.Appointments
            join p in this.dbcontext.Patient on a.Patientid equals p.id
            where a.doctorid == doctorid
            group a by a.Patientid into pg)
            on p.Patientid equals b.FirstOrDefault().Patientid
            order by p.Name
            select new { p.Patientid, p.Name }).ToList()

final code which i tried:

            (from p in this.m_dbContext.Patient
            join b in (from a in this.m_dbContext.Appointments
            join p in this.m_dbContext.Patient on a.Patientid equals 
            p.Patientid
            where a.Doctorid == doctorid && a.Clinicid == clinicid
            group a by a.Patientid)
            on p.Patientid equals b.FirstOrDefault().Patientid
            orderby p.Name
            select new
            {
              p.Patientid,
              p.Clinicid,
              p.Name,
              p.Mobilenumber,
              p.Gender,
              p.Dob,
              p.Age,
              p.Address,
              p.City,
              p.State,
              p.Pincode
           }).ToList().Count();

Исключение:

Выражение LINQ 'FirstOrDefault (GroupByShaperExpression: KeySelector: a.patientid, ElementSelector: EntityShaperExpression: EntityType: Назначения ValueBufferExpression: ProjectionBindingExpression: EmptyProjectionMember IsNullable: перевод не может быть ложным). Либо переписать запрос в форме, которую можно перевести, либо явно переключиться на оценку клиента, вставив вызов либо AsEnumerable (), AsAsyncEnumerable (), ToList (), либо ToListAsyn c (). См. https://go.microsoft.com/fwlink/?linkid=2101038 для получения дополнительной информации.

1 Ответ

1 голос
/ 29 апреля 2020

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

Этот запрос выбирает всех уникальных пациентов, использующих группу, и затем получает имя через подзапрос.

Попробуйте изменить p.Id с p.PatientId

from p in dbContext.Patients
join b in (from a in dbContext.Appointments
      join p in dbContext.Patients on a.PatientId equals p.Id
      where a.DoctorId == mydoctorId
      group a by a.PatientId)
on p.Id equals b.FirstOrDefault().PatientId
select new {p.Id, p.Name}


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