2012-10-10 61 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