[英]Most recent records with 2 tables and take / skip
我想做的,基本上是這個問題提供的: SQL Server - 如何根據兩個表中的日期顯示最近的記錄 ..唯一的區別是:我使用Linq to sql。
我要表:
這些不是很相似,但它們都有一個“LastUpdated”字段。 我想獲得最新的聯合記錄。 但是,我還需要一個take / skip功能來進行分頁(不,我沒有SQL 2012)。
我不想創建一個包含所有記錄的新列表(帶有ToList和AddRange),所以我知道整個記錄集,然后命令..這似乎非常低效。
我的嘗試:
請不要嘲笑我的低效代碼..好吧,一點點(因為它效率低下......當跳過超過0時它不能做我想要的)。
public List<TempContentPlaceholder> LatestReplies(int take, int skip)
{
using (GKDBDataContext db = new GKDBDataContext())
{
var forumPosts = db.dbForumPosts.OrderBy(c => c.LastUpdated).Skip(skip).Take(take).ToList();
var assignMents = db.dbUploadedAssignments.OrderBy(c => c.LastUpdated).Skip(skip).Take(take).ToList();
List<TempContentPlaceholder> fps =
forumPosts.Select(
c =>
new TempContentPlaceholder()
{
Id = c.PostId,
LastUpdated = c.LastUpdated,
Type = ContentShowingType.ForumPost
}).ToList();
List<TempContentPlaceholder> asm =
assignMents.Select(
c =>
new TempContentPlaceholder()
{
Id = c.UploadAssignmentId,
LastUpdated = c.LastUpdated,
Type = ContentShowingType.ForumPost
}).ToList();
fps.AddRange(asm);
return fps.OrderBy(c=>c.LastUpdated).ToList();
}
}
任何真棒的Linq到SQl的人,誰能給我一個暗示? 我相信有人可以加入他們的方式!
首先,您應該使用OrderByDescending
,因為以后的日期具有比早期日期更大的值,以便獲得最新的更新。 第二,我覺得你在做什么工作,第一頁,但你只需要取前take
值從加入名單。 也就是說,如果您希望將兩個表中的最后20個條目組合在一起,則從每個表中取出最后20個條目,合並它們,然后從合並列表中獲取最后20個條目。 當您嘗試使用分頁時會出現問題,因為您需要知道每個列表中有多少元素用於組成前一頁。 我認為,你最好的選擇可能是首先將它們合並,然后使用skip / take。 我知道你不想聽到這個,但其他解決方案可能更復雜。 或者,您可以從每個表中獲取頂部skip+take
值,然后合並,跳過skip
值並應用take
。
using (GKDBDataContext db = new GKDBDataContext())
{
var fps = db.dbForumPosts.Select(c => new TempContentPlaceholder()
{
Id = c.PostId,
LastUpdated = c.LastUpdated,
Type = ContentShowingType.ForumPost
})
.Concat( db.dbUploadedAssignments.Select(c => new TempContentPlaceholder()
{
Id = c.PostId,
LastUpdated = c.LastUpdated,
Type = ContentShowingType.ForumPost
}))
.OrderByDescending( c => c.LastUpdated )
.Skip(skip)
.Take(take)
.ToList();
return fps;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.