Ответ 1
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. Я никогда раньше не использовал эту функцию. Я считаю, что вы должны включить фильтр и установить параметр student перед запуском запроса. Тогда ваш объект Task будет содержать только завершенные задания этого студента...