簡體   English   中英

使用 ROW_NUMBER() 和 PARTITION BY 解決復雜的 LINQ 查詢

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

這是我的第一個問題。 對於一項學校作業,我正在使用 Rider 在 ASP.net MVC 中編寫一個程序。 這將是電影網絡應用程序。 查詢得到當前各廳正在播放的節目。 因此,對於 6 個大廳,我有 6 個 ID,所有 ID 都應該返回給我:

  • 館號
  • 電影標題
  • 放映時間(開始時間)

我構建的代碼是這樣的,它在我的查詢控制台中工作:

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 查詢,但我無法讓它工作。 順便說一下,我使用 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"");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM