使用 ROW_NUMBER() 和 PARTITION BY 的复杂 LINQ 查询的解决方案

Solution for complex LINQ query with ROW_NUMBER() and PARTITION BY

这是我的第一个问题。对于一项学校作业,我正在使用 Rider 在 ASP.net MVC 中编写程序。这将是电影网络应用程序。查询得到当前各厅正在播放的节目。所以,对于 6 个大厅,我有 6 个 ID,所有 ID 都应该还给我:

我构建的代码是这样的,它适用于我的 Query-console:

SELECT "HallId", "Title", "StartAt" 
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY "HallId"  ORDER BY "StartAt") rn
      FROM "Showtime" where "StartAt"::time < now()::time) x
JOIN "Movie" M ON "MovieId" = M."Id"
WHERE x.rn = 1
ORDER BY "HallId"

为此我需要一个 LINQ-query,但我无法让它工作。顺便说一下,我使用 Postgres。这就是为什么“”。 有人能给我答案吗?

你的问题对列名称不够清楚,但你可以使用与以下 linq 查询相同的名称

var result = 
(from s in  dbentities.Showtime 
join r in  dbEntities.Movie on s.Mid equals r.Mid
where s.StartAt < DateTime.Now && r.rn == 1).ToList();

这是我的解决方案:

经过长时间的搜索,我找到了下一个(神奇的)解决方案。对我来说太棒了:

public IEnumerable<Showtime> MovieNext(){

  return _context.Showtime
   .FromSqlRaw("SELECT tbl.* FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY "HallId" ORDER BY "StartAt") row 
    FROM myDb."Showtime" 
    WHERE "StartAt" > now()) tbl 
    JOIN myDb."Movie" M ON "MovieId" = M."Id" 
    WHERE tbl.row = 1 ORDER BY "HallId"");
}