[英]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.