【发布时间】:2016-06-18 04:30:12
【问题描述】:
全部,
我有一个 Linq 查询,它获取一个很好用的事件列表。我面临的问题是 Events 包含一个名为 headliners 的 Artists 的 ICollection,并且在列表中我只希望每组 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 只能获得一个 Event。我需要进行某种分组以查看该事件是否由相同(一组)艺术家执行。
我正在研究使用艺术家的主键,但因为它是一个集合,我无法让它工作。我已经尝试过使用 String.Join 来获取头条新闻的唯一键。但是,实体框架不支持此功能。
Linq to 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
【问题讨论】:
-
您能否提供您的模型以及您的具体要求。如果您提供预期的输出,那就太好了
标签: c# entity-framework linq group-by