4

我有课

public class BlogPost
{
    public int Id {get;set;}
    public string Body{get;set;}
    public IList<Comment> Comments{get;set;}
    //other properties
}

public class Comment
{
    public int Id {get;set;}
    public int TypeId {get;set;}
    public int BlogPostId {get;set;}
    public DateTime DateAdd {get;set;}
    public string Body {get;set;}
    //other properties
}

所以我们有一些 BlogPost 集合,其中每个 BlogPost 可以有很多评论。

我想收集最后一条评论的所有博客帖子(这与 MAX(DateAdde) 是 TypeId=1 或 TypeId=2。提前致谢。

4

2 回答 2

4

我尽我所能将你的类结构转换成一个查询,我做了同样的事情。我是在 1 位家长之后,其标准有一个孩子,而最新的孩子有特殊标准。我删除了父标准并应用了您的类结构,因此它应该是接近的,但未经测试。

var query = session.QueryOver<BlogPost>(); //get queryover however you implemented
BlogPost bp = null;
Comment c = null;

var q = QueryOver.Of<BlogPost>(() => bp)
    .JoinAlias(() => bp.Comments, () => c)
    .SelectList(list => list.SelectMax(() => c.DateAdd));

query.JoinQueryOver<Comment>(x => x.Comments)
    .WithSubquery
    .WhereProperty(x => x.DateAdd).Eq(q)
    .Where(x => x.TypeId == 1 || x.TypeId == 2);

     query.List...
于 2011-06-06T15:28:20.797 回答
1

您是否将 LINQ 与 NHibernate 一起使用?这样的事情怎么样?

blogPosts.Where(x => x.Comments.Last().TypeId == 1 || x.Comments.Last().TypeId == 2);

我不确定 Nhibernate 是否支持嵌套查询(许多 ORM 不支持),但是您可能想尝试一下。

于 2011-05-15T09:55:14.213 回答