Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nhibernate:从子查询投影父查询_Nhibernate_Queryover_Nhibernate Projections - Fatal编程技术网

nhibernate:从子查询投影父查询

nhibernate:从子查询投影父查询,nhibernate,queryover,nhibernate-projections,Nhibernate,Queryover,Nhibernate Projections,我有以下实体 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 Arti

我有以下实体

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;}
}
公共类ArticleCategory
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共IList项目{get;set;}
}
公共类文章
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共物品类别{get;set;}
}
公共类工作用品
{
公共int Id{get;set;}
公共作业作业{get;set;}
公共十进制价格{get;set;}
公共物品文章{get;set;}
}
正如你们所看到的,这篇文章不知道它被分配到了哪个JobArticle(它不相关)

所以我需要做的是以下几点。 获取存在作业X的作业文章的每个文章类别

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

所以我尝试了相反的方法(从一篇文章转到另一篇文章类别)。诸如此类

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))
IQueryOver q=DataSession.Current.QueryOver();
Article Alias=null;
ArticleCategory ArticleCategoryAlias=null;
q、 JoinAlias(x=>x.Article,()=>ArticleAlias);
q、 JoinAlias(x=>ArticleAlias.Category,()=>ArticleCategoryAlias);
q、 其中(x=>x.Job.Id==jobId);
q、 选择列表(列表=>list
.选择(x=>ArticleCategoryAlias))
这会导致空引用异常,因为
.Select(x=>ArticleCategoryAlias)

我真的不知道该怎么做,希望你能帮助我;
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();
ArticleCategory ArticleCategoryAlias=null; var categories=DataSession.Current.QueryOver() .WithSubquery.WhereProperty(x=>x.Id).In(QueryOver.Of()中) .JoinAlias(x=>x.Article,()=>ArticleAlias); .JoinAlias(x=>ArticleAlias.Category,()=>ArticleCategoryAlias); 其中(x=>x.Job.Id==jobId); .Select(()=>ArticleCategoryAlias.Id)) .List();
如果您需要更多信息,我很乐意提供。对不起,花了很长时间,我刚刚实现并测试了您的解决方案。以前不需要它(也无法测试它),我不确定它是否是nhibernate版本的东西,但我不得不用subquery.Where更改为
。with subquery.WhereProperty
据我回忆,我是从头顶写的。固定的。