使用 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"");
}
这是我的第一个问题。对于一项学校作业,我正在使用 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"");
}