2012-10-10 3 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에 대해 아무것도 알고 있습니다 내가해야 할 일은 다음과 같다. 모든 기사 가져 오기 작업 X에 대한 JobArticles이 존재하는 카테고리

가장 쉬운 방법은 기사 기사에 JobArticles 목록을 추가하는 것입니다. 그러나 그것이 최선의 방법인지 나는 확신하지 못한다.

그래서 저는 반대 방향으로 시도했습니다 (JobArticle에서 ArticleCategory로 이동). 나는 그것을 할 방법을 정말 잘 모르겠어요 .Select(x => ArticleCategoryAlias)

때문에 NULL 참조 예외로 연결하는

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)) 

같은 뭔가, 좀 더 자세한 정보가 필요하면 당신이

+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

관련 문제