LINQ: нет перегрузки для метода 'GroupBy', принимает 6 аргументов / IGrouping<t, t> не содержит определения
Проблема: получение ошибки
"Никакая перегрузка для метода" 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 ответа
Так что ваш вклад 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
Вам необходимо создать анонимный объект со списком всех полей, которые будут включены в группу, а затем получить доступ к этим полям, используя свойство 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);
Обновить:
У вас есть простая проблема в вашем коде, измените свой код на это:
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
Вы должны новые и установить свои данные, как мой образец.