このクエリを NHibernate で簡単にする方法はありますか?
理解のために、これはNHibernateで作成したいクエリです:
Select * from Task
Where task_id not in
(Select task_id from UserTask
Where solved = 1 AND [user_id] = 1)
そして、これはNHibernateを使用したC#の私のコードです
public IList<Task> RandomTasks(List<int> subject_ids, int userId)
{
//Gets all Ids where the User has solved the Task
List<int> task_ids = new List<int>(_session.Query<UserTask>()
.Where(x => x.User.user_id == userId)
.Where(x => x.solved)
.Select(x => x.Task.task_id));
//Gets all Tasks except the task_ids from the result of the query befor
var query = _session.QueryOver<Task>()
.Where(s => s.Subject.subject_id.IsIn(subject_ids))
.Where(t => !t.task_id.IsIn(task_ids))
.Take(10)
.List();
return query;
}
クエリは正しい結果を返しますが、同じ結果を得るにはもっと簡単な方法があると思います。