Все,EF Linq group by ICollection of objects
У меня есть запрос Linq, который извлекает список событий, который отлично работает. Проблема, с которой я сталкиваюсь, заключается в том, что События содержит ICollection Артисты под названием headliners и в списке Мне нужно всего 1 событие на, набор, Исполнитель (ы).
Запрос под отлично работает, но: я требую топ 10 из События но только один событие на, набор, художника (ов) для сортировки популярности художника с самой высокой популярности можно использовать - Не то, что я хочу.
Context.Events
.Where(x => x.Stage.Venue.AreaId == 1 && x.StartDateTimeUtc > DateTime.UtcNow && x.IsVerified)
.OrderByDescending(x => x.Headliners.Max(y => y.Popularity))
.Take(10)
.ToList();
Как я могу настроить запрос выше, что я только получить один событие за Исполнитель. Мне нужно будет сделать какую-то группировку, чтобы увидеть, выполняется ли событие одним и тем же (набором) Artist (s).
Я ищу использование первичного ключа исполнителя, но поскольку это коллекция, я не могу заставить ее работать. Я уже попробовал String.Join получить единственный уникальный ключ для хедлайнеров. Однако это не поддержка в инфраструктуре сущности.
Это что-то, что может (изящно) поддерживать Linq в EF?
Следующий запрос SQL делает почти то, что я хочу ожидать, что он не будет работать с несколькими художником для того же события
SELECT MAX(E.EventId), MAX(E.Name)
FROM [dbo].[Events] E
INNER JOIN [dbo].[Stages] S ON E.StageId = S.StageId
INNER JOIN [dbo].[Venues] V ON S.VenueId = V.VenueId
INNER JOIN [dbo].[Areas] A ON V.AreaId = A.AreaId
INNER JOIN [dbo].[Headliners] H ON E.EventId = H.EventId
INNER JOIN [dbo].[Artists] A2 ON A2.ArtistId = H.ArtistId
WHERE E.IsVerified = 1 AND E.StartDateTimeUtc>GETDATE() AND A.AreaId = 1
GROUP BY A2.ArtistId, A2.Name, A2.EchoNestHotttnesss
ORDER BY A2.EchoNestHotttnesss desc
Можете ли вы предоставить свою модель и что именно вы просите. Будет здорово, если вы предоставите ожидаемый результат – Eldho