Я поражен тем, как подойти к этой проблеме.Я пишу функцию, в которой я хочу, чтобы тип возвращаемого значения был:
Dictionary(Of String, Dictionary(Of Integer, List(Of Article)))
Я получил список статей, которые я хотел сгруппировать по названию семестра, затем по значению месяца, затем по спискустатьи, которые вписываются в это.
До сих пор я был в состоянии сделать это:
Dim lectures As New Dictionary(Of Integer, List(Of Article))
lectures = (From Articles In db.Articles _
Order By Articles.StartDate.Value.Month Ascending _
Where Articles.ArtType = ArticleConstants.lecturesTypeId _
Group By Articles.StartDate.Value.Month _
Into Group).AsEnumerable().Reverse.ToDictionary(Function(x) x.Month, Function(x) x.Group.ToList())
И это дает мне внутренний словарь, однако я не уверен, куда идти дальше.Поскольку я храню месяц только как целое число, я не могу использовать его, чтобы надежно определить семестр (так как семестр - «Осень 2011»).Я также не могу получить полную дату, потому что тогда моя группировка не будет работать.
У меня есть служба для получения семестра на основе startDate Статьи, которая выглядит следующим образом:
SemesterService.getSemester(Article.StartDate)
Но опять же я не уверен, как это применить.Я думаю, может быть, я просто начну со всех статей в заданном диапазоне дат, а затем вручную заполню как внутренние, так и внешние словари, основываясь на некоторой логике, которая повторяет эти результаты, но я никогда раньше не делал что-то такое сложное, и у меня возникают проблемы.
Итак, в конце я получу набор результатов, который выглядит следующим образом:
Fall 2011 (outer dictionary key)
1 (for January, inner dictionary key)
Article 1
Article 2 (list of articles, inner dictionary value)
Article 3
Может кто-нибудь мне помочь?
РЕДАКТИРОВАТЬ: Я открыт для использования другого возвращаемого типа, если он вложен и группирует данные одинаковым образом.
Семестр НЕ является объектом, хранящимся в базе данных вообще.Это просто статический объект, который я заполняю на основе даты, поэтому я не могу сделать запрос по этому.У меня есть только мои статьи в базе данных, с которой связана начальная дата, и, используя эту начальную дату, я могу рассчитать семестр, в котором он находится.
Редактировать: Решение для пробной версии ниже:
From Articles In db.Articles _
Order By Articles.StartDate.Value.Month Ascending _
Where Articles.ArtType = ArticleConstants.lecturesTypeId _
Group New With { Articles, .Semester = SemesterService.getSemester(Articles.StartDate) } By Articles.StartDate.Value.Month _
Into Group
После этого я получаю сообщение об ошибке: LINQ to Entities does not recognize the method 'Semester getSemester(System.DateTime)' method, and this method cannot be translated into a store expression.
Кажется, что действительно очень не нравится группировка по тому, что вы вычисляете в запросе, но не в исходном наборе данных.