c# linq с исключением из группы и соединения - PullRequest
2 голосов
/ 29 апреля 2020
(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();

При запуске я получаю следующее исключение: я использую group by, чтобы удалить дубликаты в наборе результатов

Исключение:

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

1 Ответ

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

Возможно, ваш групповой бой можно изменить, чтобы преодолеть это препятствие. Сложность перевода запроса GroupBy linq в правильный запрос sql все еще остается проблемой разработки с dotnetcore.

Редактировать: Я вижу закрытую проблему на Github: Запрос с GroupBy или GroupJoin выдает исключение # 17068 Но я не уверен, работают ли они над проблемой GroupBy, или она исправлена, или они ничего не будут с этим делать.

Возможно, вы можете изменить свой запрос следующим образом: Обратите внимание, что я удалил .ToList() перед подсчетом, потому что мне кажется излишним, если вам просто нужен подсчет.

var patientIds = (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
                  select a.Patientid).Distinct();

var items = (from p in this.m_dbContext.Patient
             join patientId in patientIds on p.Patientid equals 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();

Или если вам просто нужен подсчет:

var count = (from p in this.m_dbContext.Patient
             join patientId in patientIds on p.Patientid equals patientId
             orderby p.Name
             select new
             {
                 p.Patientid
             }).Count();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...