0

次のエンティティがあります

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;}
}

ご覧のとおり、Article はどの JobArticle に割り当てられているかについて何も認識していません (関係ありません)。

だから私がする必要があるのは次のことです。ジョブ X の JobArticles が存在するすべての ArticleCategory を取得します。

最も簡単な方法は、JobArticles のリストを Article エンティティに追加することです。しかし、それが最善の方法であるかどうかはわかりません。

そこで、逆の方法 (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))

これは NULL 参照例外につながります。.Select(x => ArticleCategoryAlias)

どうすればいいのかわからないので、お役に立てれば幸いです

4

1 に答える 1

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();
于 2012-10-11T12:44:19.773 に答える