2016-03-04 45 views
2

全部,EF Linq group by ICollection of objects

我有一个Linq查询,它提取了一个很好的事件列表。我面临的问题是,事件包含一个集合艺术家调用头条新闻,并在列表中我只想要1件事件,每套,艺术家(S)。

查询下工作正常,但:我需要的活动但只有一个事件左右,排序与人气最高的艺术家的普及设定的,艺术家(S)前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(); 

如何调整上面查询我只得到每艺术家一个事件。我需要做一些分组来查看事件是否由相同(一组)艺术家执行。

我正在研究使用艺术家的主键,但因为它是一个集合,我无法让它工作。我已经尝试了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 
+1

你可以提供你的模型,你究竟在问什么。如果你提供预期的输出效果会很好 – Eldho

回答