Таким образом, ваш 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