Entity Framework Core с использованием выбора и группировки по - PullRequest
2 голосов
/ 01 февраля 2020

Я хочу использовать select и groupby в своем запросе

_context.UserChart_Tbl
        .Where(uc => uc.UserID == "6")
        .GroupBy(g => g.OrgnizationID)
        .Select(g => g.OrgnizationID)
        .ToArray();

Но я получаю ошибку в select

Ошибка CS1061 «IGrouping» делает не содержит определения для «OrgnizationID» и не найден доступный метод расширения «OrgnizationID», принимающий первый аргумент типа «IGrouping» (отсутствует директива using или ссылка на сборку?)

Как решить эту проблему?

Обновление

Ошибка, решаемая этим кодом

_context.UserChart_Tbl
          .Where(uc => uc.UserID == u.Id)
          .GroupBy(g => g.OrgnizationID)
          .Select(g => g.Key).ToArray()

Полный код

    public List<DoctorDropDoenViewModel> DoctorDropDown()
    {
        var query = (from u in _context.Users
                     join
                     UR in _context.UserRoles on u.Id equals UR.UserId
                     join
                     D in _context.Doctor_Tbl on u.Id equals D.DoctorUserId
                     where UR.PolicyID == 4

                     select new DoctorDropDoenViewModel()
                     {
                         DoctorID = u.Id,
                         DoctorFullName = u.FirstName + " " + u.Family,
                         OrgID = _context.UserChart_Tbl.Where(uc => uc.UserID == u.Id)
                         .GroupBy(g => g.OrgnizationID).Select(g => g.Key).ToArray()
                     });


      return query.ToList();
    }

И

public class DoctorDropDoenViewModel
{
    public string DoctorID { get; set; }
    public string DoctorFullName { get; set; }
    public int[] OrgID { get; set; }
}

DoctorID может иметь несколько OrgID, которые также могут быть дубликатами. Я хочу отображать дубликаты только один раз. Для этой цели я использую Distinct и Group By.

Но Group By не работает

enter image description here

Ответы [ 3 ]

0 голосов
/ 01 февраля 2020

Чтобы получить отдельные элементы из массива OrganizationID, вам не нужно выполнять GroupBy, вам нужно создать новый динамический c объект, используя метод .Select().

Попробуйте следующее решение, это может помочь

public List<DoctorDropDoenViewModel> DoctorDropDown()
{
    var query = (from u in _context.Users
                 join
                 UR in _context.UserRoles on u.Id equals UR.UserId
                 join
                 D in _context.Doctor_Tbl on u.Id equals D.DoctorUserId
                 where UR.PolicyID == 4

                 select new DoctorDropDoenViewModel()
                 {
                     DoctorID = u.Id,
                     DoctorFullName = u.FirstName + " " + u.Family,
                     OrgID = _context.UserChart_Tbl
                     .Where(uc => uc.UserID == u.Id)
                     .Select(g => g.OrgnizationID)  //Select only OrganizationID from complete object
                     .Distinct()   //Remove duplicates.
                     .ToArray()    //Convert IEnumerable<T> to Array
                 });


  return query.ToList();
}
0 голосов
/ 01 февраля 2020

Вы можете использовать следующий код

_context.UserChart_Tbl.Where(uc => uc.UserID == u.Id)
.Where(x=>x.DoctorID==1).Select(g => g.OrgnizationID).Distinct().ToArray()}
0 голосов
/ 01 февраля 2020

Когда вы группируете элементы, свойство, которое вы используете для группы, переходит в «Ключ» группы. Замените Select(g => g.OrgnizationID) на Select(g => g.Key), это должно помочь.

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