cho*_*bo2 14 nhibernate queryover
我需要在子集合上做一个子查询,但我无法让它工作.
我试过这个
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();
Run Code Online (Sandbox Code Playgroud)
但我得到了
如果没有投影,则无法在标准上使用子查询.
dot*_*joe 24
session.QueryOver<Task>(() => tAlias)
.WhereRestrictionsOn(x => x.Course.Id).IsIn(courseIds)
.WithSubquery.WhereExists(QueryOver.Of<CompletedTask>()
.Where(x => x.id == tAlias.id) //not sure how you need to link Task to CompletedTask
.Where(x => x.Student.StudentId == settings.StudentId)
.Select(x => x.id)) //exists requires some kind of projection (i.e. select clause)
.List<Task>();
Run Code Online (Sandbox Code Playgroud)
或者如果你只想要完成任务那么就......
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>();
Run Code Online (Sandbox Code Playgroud)
或者研究在Task.CompletedTasks集合上设置学生过滤器.我以前从未使用过这个功能.我相信你必须在运行查询之前启用过滤器并设置student参数.那么你的Task对象只包含那个学生的completedTasks ......
http://nhibernate.info/doc/nh/en/index.html#filters
| 归档时间: |
|
| 查看次数: |
15683 次 |
| 最近记录: |