2012-10-10 63 views
0

我有以下实体NHibernate的:从子查询项目父

public class ArticleCategory 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
    public IList<Article> Articles {get; set;} 
} 

public class Article 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
    public ArticleCategory Category {get; set;} 
} 

public class JobArticles 
{ 
    public int Id {get; set;} 
    public Job Job {get; set;} 
    public decimal Price {get; set;} 
    public Article Article {get; set;} 
} 

正如你所看到的文章一无所知到JobArticle已分配(这是不相关)

所以我需要做的是以下几点。 获取存在Job X的每个ArticleCategory。

最简单的方法是将工作条目列表添加到文章实体。但我不确定这是否是最好的方法。

所以我尝试了相反的方式(从JobArticle到ArticleCategory)。这样

IQueryOver<JobArticle, JobArticle> q = DataSession.Current.QueryOver<JobArticle>(); 

     Article ArticleAlias = null; 
     ArticleCategory ArticleCategoryAlias = null; 

     q.JoinAlias(x => x.Article,() => ArticleAlias); 
     q.JoinAlias(x => ArticleAlias.Category,() => ArticleCategoryAlias); 
     q.Where(x => x.Job.Id == jobId); 
     q.SelectList(list => list 
      .Select(x => ArticleCategoryAlias)) 

一些东西,导致空引用异常,因为.Select(x => ArticleCategoryAlias)

我真的不知道怎么办呢,希望你能帮助

+0

如果您需要了解更多信息,我很乐意提供。 – Arikael

回答

0
Article ArticleAlias = null; 
ArticleCategory ArticleCategoryAlias = null; 

var categories = DataSession.Current.QueryOver<ArticleCategory>() 
    .WithSubquery.WhereProperty(x => x.Id).In(QueryOver.Of<JobArticle>() 
     .JoinAlias(x => x.Article,() => ArticleAlias); 
     .JoinAlias(x => ArticleAlias.Category,() => ArticleCategoryAlias); 
     .Where(x => x.Job.Id == jobId); 
     .Select(() => ArticleCategoryAlias.Id)) 
    .List(); 
+0

对不起,花了很长时间,我刚刚实施并测试了您的解决方案。以前并不需要它(并且不能测试它) 我不确定它是否是一个nhibernate版本的东西,但我必须将'.WithSubquery.Where'改为'.WithSubquery.WhereProperty' – Arikael

+0

至于我回想起我从头顶上写下它。固定。 – Firo