c#-具有2个表并采用/跳过的最新记录
作者:互联网
我要做的基本上是这个问题所提供的:SQL Server – How to display most recent records based on dates in two tables ..唯一的区别是:我正在使用Linq到sql.
我要表:
>作业
>论坛帖子
这些不是很相似,但是它们都有一个“ LastUpdated”字段.我想获取最新的加入记录.但是,我还需要获取/跳过功能进行分页(不,我没有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();
}
}
对SQl人士来说,任何很棒的Linq,谁能给我提示?我相信有人可以加入其中!
解决方法:
首先,您应该使用OrderByDescending,因为较晚的日期具有比较早的日期更大的值,以便获取最新的更新.其次,我认为您的工作将对第一页有效,但您也只需从合并列表中获取最重要的值.也就是说,如果您要合并两个表中的最后20个条目,从每个表中获取最后20个条目,合并它们,然后从合并列表中获取最后20个条目.当您尝试使用分页时会出现问题,因为您需要做的是知道每个列表中有多少个元素组成了前几页.我认为,最好的选择是先将它们合并,然后再使用“跳过/接听”.我知道您不想听,但是其他解决方案可能更复杂.或者,您可以从每个表中获取最上面的跳过量值,然后合并,跳过跳过的值并应用获取量.
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;
}
标签:join,linq,sql-server-2008,sql,c 来源: https://codeday.me/bug/20191031/1974982.html