我不确定要搜索什么,因此无法得到答案。
我有以下设置:
public class CommunitySubForum
{
[Key]
public Int32 Id { get; set; }
public String Title { get; set; }
public String Description { get; set; }
public Int32 DisplayOrder { get; set; }
public Int32 ParentForumId { get; set; }
public virtual CommunityForum ParentForum { get; set; }
public virtual List<CommunityThread> Threads { get; set; }
}
public class CommunityThread
{
[Key]
public Int32 Id { get; set; }
public String Title { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateEdited { get; set; }
public Boolean IsLocked { get; set; }
public Int32 ParentForumId { get; set; }
public virtual CommunitySubForum ParentForum {get;set;}
public virtual List<CommunityPost> Posts { get; set; }
public virtual MLUser MlUser { get; set; }
public Int32 MLUserId { get; set; }
}
public class CommunityPost
{
public Int32 Id { get; set; }
public String Content { get; set; }
public DateTime CreateDate { get; set; }
public DateTime EditDate { get; set; }
public Int32 ThreadId { get; set; }
public virtual CommunityThread Thread { get; set; }
public virtual MLUser MlUser{ get; set; }
public Int32 MLUserId { get; set; }
public Int32 MediaItemParentId { get; set; }
public BaseMediaItem MediaItem { get; set; }
}
现在,我要做的是,在子论坛中获取最新帖子的帖子。
获取最新的线程没有问题,但我不确定如何以高效的方式获取最新帖子的线程。优选用λ
显然,我可以获得最新的帖子并获取线程并将其添加到我的subforum obj中的单独查询中,但我希望在单个查询中获取它。
编辑:我需要获得所有子论坛的列表,其中包含一个包含最新帖子的帖子。像这样:http://i.imgur.com/8RHvqxK.png
答案 0 :(得分:1)
你需要做这样的事情:
var result =
subforums
.Select(sf => new
{
SubForum = sf,
MostRecentPost =
sf.Threads
.SelectMany(t => t.Posts)
.OrderByDescending(p => p.CreateDate)
.FirstOrDefault()
})
.ToList();
此查询将为您提供一个匿名类型对象列表,其中包含CommunitySubForum
个对象及相应的最新CommunityPost
对象。
如果您只对这些对象的某些属性感兴趣,可以轻松修改查询以选择特定属性。
如果您想要最新的主题,只需使用Select
选择Thread
或其任何属性,如下所示:
var result =
subforums
.Select(sf => new
{
SubForum = sf,
MostRecentThread =
sf.Threads
.SelectMany(t => t.Posts)
.OrderByDescending(p => p.CreateDate)
.Select(p => p.Thread)
.FirstOrDefault()
})
.ToList();
答案 1 :(得分:1)
收集每个主题的最新发布日期,然后按照此最新发布日期对主题进行排序以获取最新发布日期:
from f in Subforums
select new
{
f.Title,
ThreadWithNewestPost = (
from t in f.Threads
select new
{
t.Title,
NewestPostDate = t.Posts.Max(p => p.CreateDate )
}
).OrderByDescending(x => x.NewestPostDate)
.FirstOrDefault()
}
我认为Thread
始终有Posts
,否则你应该在查询中检查它。