LINQ: нет перегрузки для метода «GroupBy» принимает 6 аргументов / IGroupingне содержит определения - PullRequest
0 голосов
/ 04 октября 2018

Проблема: получение ошибки

"Никакая перегрузка для метода 'GroupBy' не принимает 6 аргументов"

Многие статьи SO предназначены для определенных пользовательских методов.GroupBy является частью библиотеки.

Я пытался варьировать количество аргументов.Если я изменяю его на 2 аргумента, то ошибки указывают на следующую область, где он имеет OrderByDescending и выдает ошибку:

«IGrouping не содержит определения для« Start_Date »и не имеет метода расширения»Start_Date ', принимающий первый аргумент типа' IGrouping ', может быть найден. "

Код, который выдает эту ошибку:

var someVariable = DbContextObject.View.Where(
                        m =>
                            m.Some_ID == CurrentlyEditingSomeID
                        ).GroupBy(d=> d.Start_Date,f=>f.Some_ID).AsQueryable().OrderByDescending(m => m.Start_Date);

Для использования в ListView

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Обновление:

У вас есть простая проблема в вашем коде, замените код следующим образом:

var rooms = roomBinding.GroupBy(g => new { Id = g.R_ID, Name = g.r_name })
                   .Select(g => new
                       {
                           Id = g.Key.Id,
                           Name = g.Key.Name,
                           Count = g.Count()
                       });

После нового в grouping вы должны к новомуи установите ваши данные как мой образец.

0 голосов
/ 04 октября 2018

Таким образом, ваш GroupBy является последовательностью Views.Каждый View имеет по крайней мере StartDate и SomeId.

Ваш GroupBy группирует весь ввод Views в группы элементов, извлеченных из Views с одинаковыми StartDate.У каждой группы есть Key, содержащий этот общий StartDate, элементы в группе являются SomeId из Views в группе.

Результат GroupBy уже IQueryable<...>.Так что AsQueryable не нужно, это только замедлит ваш процесс.

Ввод вашего Orderby представляет собой последовательность групп.Увы, у групп нет StartDate.К счастью, у групп есть Key, содержащий StartDate, который вы хотите заказать.

var result = DbContextObject.Views
    // I onlly want the views with a certain SomeId:
    .Where(view => view.SomeID == CurrentlyEditingSomeID)

    // group the views into groups with same StartDate
    // the elements in the group are the SomeId
    .GroupBy(view => view.StartDate, view=>view.SomeID)
    // result: a sequence of Groups with a Key and a sequence of SomeId objects

    // order the Groups by StartDate, This StartDate is in the Key
    .OrderBy(group => group.Key);

Кстати, если вы не хотите Key, и настаивайте на том, чтобы StartDate, существует менее известная перегрузка GroupBy .Версия, в которой вы можете выбрать то, что вы хотите в своем выводе.

.GroupBy(view = view.StartDate,         // make groups with same StartDate
    view => view.SomeId,                // select SomeId as elements in the group
    (commonStartDate, someIds) => new   // from every commonStartDate and the someIds
    {                                   // in this group make a new object
        StartDate = commonstartDate,    // containing this common StartDate
        SomeIds = someIds,              // and the SomeId objects in the group
    })
    .OrderBy(group => group.StartDate); // now you can order by StartDate instead of Key
0 голосов
/ 04 октября 2018

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

var someVariable = DbContextObject.View.Where(
                        m =>
                            m.Some_ID == CurrentlyEditingSomeID
                        ).GroupBy(d=> new { d.Start_Date,d.Some_ID}).AsQueryable().OrderByDescending(m => m.Key.Start_Date);
...