У меня проблема с запросом LINQ.У меня есть следующая структура данных (классы Entity Framework, сопоставленные с базой данных SQL Server):
Событие имеет свойство EventBlocks с 0 или более объектами EventBlock в качестве дочерних.EventBlock имеет свойство Details с 0 или более объектами EventBlockDetail в качестве дочерних.EventBlockDetail имеет DetailDate и StartTime.
Мне нужно показать следующие 3 предстоящих события на веб-сайте.Порядок сортировки определяется самой ранней датой и временем начала события, которая хранится в Event -> EventBlock -> EventBlockDetail.Если следующие 2 или 3 предстоящих события EventBlockDetails принадлежат одному и тому же событию, это событие должно отображаться только один раз, а другое событие должно отображаться в верхних 3.
Есть ли способ выполнить это с помощьюодин запрос LINQ, поэтому мне не нужно будет делать много циклов и сравнивать после получения ВСЕХ данных о событиях из базы данных?
Чтобы проиллюстрировать, что я пытаюсь сделать, вот фиктивный запрос, которыйочевидно, не будет работать, потому что первый OrderBy не знает, какое свойство для заказа.
var result = this.Context.Events.Where(
e => e.WebsiteId == websiteId &&
e.EventBlocks.All(
b => b.Details.All(
d => d.DetailDate >= DateTime.Now
)
)
).OrderBy(
e => e.EventBlocks.OrderBy(
b => eb.Details.Min(d => d.DetailDate)).ThenBy(
b => eb.Details.Min(d => d.StartTime))
).Take(nrOfEvents).ToList();