【问题标题】:nhibernate: project a Parent from a child-querynhibernate:从子查询中投影父级
【发布时间】:2012-10-10 09:29:58
【问题描述】:

我有以下实体

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 一无所知(它不相关)

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

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

所以我尝试了相反的方法(从 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-Reference 异常,因为 .Select(x =&gt; ArticleCategoryAlias)

我不太清楚怎么做,希望你能帮忙

【问题讨论】:

  • 如果您需要更多信息,我很乐意提供。

标签: nhibernate queryover nhibernate-projections


【解决方案1】:
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();

【讨论】:

  • 抱歉,花了很长时间,我刚刚实施并测试了您的解决方案。以前不需要它(并且无法测试它)我不确定它是否是一个休眠版本的东西,但我不得不将.WithSubquery.Where更改为.WithSubquery.WhereProperty
  • 我记得我是从头顶写的。固定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多