如何在nhibernate中执行子查询?
我需要对子集合执行子查询,但无法使其工作 我试过这个如何在nhibernate中执行子查询?,nhibernate,queryover,Nhibernate,Queryover,我需要对子集合执行子查询,但无法使其工作 我试过这个 Task tAlias = null; List<Task> result = session.QueryOver<Task>(() => tAlias) .Where(Restrictions.In(Projections.Property(() => tAlias.Course.Id), courseIds))
Task tAlias = null;
List<Task> result = session.QueryOver<Task>(() => tAlias)
.Where(Restrictions.In(Projections.Property(() => tAlias.Course.Id), courseIds))
.WithSubquery.WhereExists(QueryOver.Of<CompletedTask>().Where(x => x.Student.StudentId == settings.StudentId))
().ToList();
Task tAlias=null;
列表结果=session.QueryOver(()=>tAlias)
.Where(Restrictions.In(projects.Property(()=>tAlias.Course.Id),courseIds))
.with subquery.WhereExists(QueryOver.Of().Where(x=>x.Student.StudentId==settings.StudentId))
()托利斯特();
然而我得到了
无法对条件使用子查询
没有投影
session.QueryOver(()=>tAlias)
.WhereRestrictionsOn(x=>x.Course.Id).IsIn(courseIds)
.WithSubquery.WhereExists(QueryOver.Of())
.Where(x=>x.id==tAlias.id)//不确定如何将任务链接到CompletedTask
.Where(x=>x.Student.StudentId==settings.StudentId)
.Select(x=>x.id))//exists需要某种类型的投影(即Select子句)
.List();
或者如果你只想要完成的任务,那么就
Task taskAlias = null;
session.QueryOver<CompletedTask>()
.JoinAlias(x => x.Task, () => taskAlias)
.WhereRestrictionsOn(() => taskAlias.Course.Id).IsIn(courseIds)
.Where(x => x.Student.StudentId == settings.StudentId)
.List<CompletedTask>();
Task taskAlias=null;
session.QueryOver()
.JoinAlias(x=>x.Task,()=>taskAlias)
.WhereRestrictionsOn(()=>taskAlias.Course.Id).IsIn(courseIds)
.Where(x=>x.Student.StudentId==settings.StudentId)
.List();
或者考虑在Task.CompletedTasks集合上设置学生筛选器。我以前从未使用过此功能。我认为在运行查询之前,必须启用筛选器并设置student参数。那么您的任务对象将只包含该学生完成的任务
@dotjoe-我想返回整个任务对象,我也要返回(x=>x.Task)?@dotjoe-为什么我需要在id上执行where子句?为什么我需要将任务链接到completedTask。我只是希望向下查询已完成的任务,这样它就只有student.updated答案的记录。我认为这个错误只是因为WhereExists分离查询没有任何投影,即
Select()
。主查询只能List()
您不必在exists子句中使用id。我以为你只想要学生完成的任务?如果您不将任务链接到已完成的任务,那么如果学生至少完成一项任务,您将获得所有任务。@dotjoe-我想选择整个CompletedTask对象,我该怎么做?
Task taskAlias = null;
session.QueryOver<CompletedTask>()
.JoinAlias(x => x.Task, () => taskAlias)
.WhereRestrictionsOn(() => taskAlias.Course.Id).IsIn(courseIds)
.Where(x => x.Student.StudentId == settings.StudentId)
.List<CompletedTask>();