[英]Need help converting SQL query to LINQ statement for use in my ASP.NET MVC 3 project
這是我需要轉換為LINQ語句以在ASP.NET MVC 3項目中使用的查詢。 我對LINQ的了解還不是很好,所以我需要一些幫助。
WITH CTE AS (
SELECT a.GalleryID GalleryID_A, a.GalleryTitle, a.GalleryDate, b.*
,ROW_NUMBER() OVER (PARTITION BY a.GalleryID, a.GalleryTitle, a.GalleryDate
ORDER BY b.MediaThumb DESC) AS Rn
FROM Media b
INNER JOIN Galleries A ON a.GalleryID = b.GalleryID
),
CTE2 AS (
SELECT a.GalleryID GalleryID_A, a.GalleryTitle, a.GalleryDate, b.*, 1 Rn
FROM Media b
LEFT OUTER JOIN Galleries A ON a.GalleryID = b.GalleryID
)
SELECT * FROM CTE where rn = 1
UNION ALL
SELECT * FROM CTE2
WHERE rn = 1
AND galleryid is null
ORDER BY MediaID DESC
這是我的解決方案。
var Results = DB.Database.SqlQuery<WhatsNew>
(@" WITH CTE AS (
SELECT a.GalleryTitle, a.GalleryDate, b.*,
ROW_NUMBER() OVER (PARTITION BY a.GalleryID, a.GalleryTitle, a.GalleryDate
ORDER BY b.MediaThumb DESC) AS Rn
FROM Media b
INNER JOIN Galleries A
ON a.GalleryID = b.GalleryID
),
CTE2 AS
(
SELECT a.GalleryTitle, a.GalleryDate, b.*,
1 Rn
FROM Media b
LEFT OUTER JOIN Galleries A
ON a.GalleryID = b.GalleryID
)
SELECT * FROM CTE where rn = 1
UNION ALL
SELECT * FROM CTE2 WHERE rn = 1 and galleryid is null
ORDER BY MediaID DESC ");
如果您只是學習linq並想轉換這樣的復雜查詢,我建議您使用此工具
創建查詢作為sql視圖,說“ MyView”,然后從MVC項目中調用它。
return db.ExecuteStoreQuery<YourEntityType>("SELECT * FROM MyView");
如果僅將CTE用於分頁,則可以使用Skip()
和Take()
擴展名。
var page = (from a in _context.Set<Media>()
orderby a.GalleryID, a.GalleryTitle, a.GalleryDate
select a)
.Skip(page * size).Take(size);
或使用PagedList 。
var page = (from a in _context.Set<Media>()
orderby a.GalleryID, a.GalleryTitle, a.GalleryDate
select a)
.ToPagedList(page, size);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.