使用LINQ检查ORDER BY中多个表的时间戳

时间:2010-11-17 18:55:21

标签: c# linq-to-sql

假设我正在实施一个博客,并希望根据最新活动显示最新帖子(因此新帖子上的最新时间戳或新评论或新评论)。我的对象结构是这样的:

Post
 EntityCollection<Comment>
 EntityCollection<Like>

现在,我只按照Post上的最新时间戳订购:

public IQueryable<Post> GetPosts()
        {
            return from post in _db.Posts
                   orderby post.CreatedDate descending
                   select post;
        }

我如何修改它以便它在评论和喜欢上检查CreatedDate,所以我的订购是基于最新的活动,而不仅仅是Post createddate?

3 个答案:

答案 0 :(得分:1)

您应该创建一个名为ActionsEvents之类的通用表或类似的东西。此表应记录发生的每个事件 - 帖子,评论和喜欢。该表包含有关每个事件的泛型信息。该信息可以例如包括事件的时间,事件的类型,发起事件的用户id以及事件的唯一ID。有关事件的更多特定信息,您需要使用链接到通用表的特定表中的外键约束来连接到您的特定表。

使用这种结构,可以很容易地按排序顺序获取所有事件的列表,如果通用表中的timestamp列被编入索引,则效率很高。

答案 1 :(得分:1)

假设Like表和Comment表中的外键成员名为PostID,

List<Comment> lstComment
List<Like> lstLike

将查询更改为:

var posts = from p in lstPost
            join c in lstComments on p.ID equals c.PostID
            join l in lstLikes on p.ID equals l.PostID
            orderby p.CreateDate, c.ActionDate, l.ActionDate
            select p;
祝你好运!

答案 2 :(得分:1)

在Post表上使用修改后的日期,每当在该帖子中添加评论时,将修改后的日期更新为当前时间,并使用modifiedDate进行排序。