我有以下实体:分类(Category)、主题(Topic)、帖子(Post)和成员(Member)。它们之间的关系如下:
- 分类拥有一组主题
- 主题拥有一组帖子
- 帖子拥有一个成员
public class Category
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual IList<Topic> Topics { get; set; }
}
public class Topic
{
public Guid Id { get; set; }
public string Name { get; set; }
public DateTime CreateDate { get; set; }
public virtual Category Category { get; set; }
public virtual IList<Post> Posts { get; set; }
public virtual MembershipUser User { get; set; }
}
public class Post
{
public Guid Id { get; set; }
public string PostContent { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateEdited { get; set; }
public virtual Topic Topic { get; set; }
public virtual MembershipUser User { get; set; }
}
public class MembershipUser
{
public Guid Id { get; set; }
public string UserName { get; set; }
etc....
}
我希望能够有效地进行以下查询:
- 获取包括发表该帖子的会员在内的某一类别(按CategoryId)中的最新帖子
- 获取包括发表该帖子的会员在内的某一主题(按TopicId)中的最新帖子
我一直在使用包括()函数的以下方法-但我想知道是否有更有效的方法来完成这个操作...?
查询1
_context.Category
.Where(x => x.Id == categoryId)
.Include(x => x.Topics.Select(p => p.Posts.Select(u => u.User)))
.SelectMany(x => x.Topics)
.SelectMany(x => x.Posts)
.OrderByDescending(x => x.DateCreated)
.FirstOrDefault();
查询 2
_context.Topic
.Where(x => x.Id == topicId)
.Include(x => x.Posts.Select(u => u.User))
.SelectMany(x => x.Posts)
.OrderByDescending(x => x.DateCreated)
.FirstOrDefault();
非常感谢任何帮助或指导。