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>();
или, если вам нужна только завершенная задача, просто ...
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.CompletedTasks. Я никогда не использовал эту функцию раньше. Я считаю, что вы должны включить фильтр и установить параметр студента, прежде чем выполнять запрос. Тогда ваш объект задачи будет содержать только выполненные задачи этого студента ...
http://nhibernate.info/doc/nh/en/index.html#filters