둘 다 잘 수행되는 두 가지 쿼리를 만들었지 만 이들을 결합하는 방법을 이해하는 데 정말로 애 쓰고 있습니다. 가장 큰 문제는 두 가지 구문을 사용하여 쿼리를 작성했지만 "SQL-esque"마크 업을 사용하지 않고 첫 번째 쿼리를 표현하는 방법을 잘 모르겠습니다. 첫 번째 쿼리와 두 번째 쿼리에 대한 NHibernate에 마크 업에 대한 자세한 구문을 사용결과를 교차하는 두 NHibernate 쿼리를 결합하기 위해 애 쓰고 있습니다.
- : 당신이 볼 수 있듯이
List<Task> tasksFromQueue = NHibernateSession.CreateQuery( "Select t from Task t, QueueLocation q where q.Queue.ID = :queueID and (t.SiteID = q.ComponentID or t.OriginalSiteID = q.ComponentID)") .SetParameter("queueID", queueID).List<Task>().ToList(); List<Task> tasksFromWorkflow = NHibernateSession .CreateCriteria(typeof(Task), "Task") .CreateCriteria("Task.Order", "Order") .CreateAlias("Task.TaskDevice", "TaskDevice").List<Task>(); IEnumerable<Task> tasks = tasksFromWorkflow.Intersect(tasksFromQueue);
나는 두 가지 문제가 있습니다.
- DB를 두 번 누른 다음 결과를 교차시킵니다.
tasksFromWorkflow 쿼리는 실제로 위에서 설명한 것보다 훨씬 복잡합니다. 전체 쿼리 click here.을보고 싶다면 여분의 코드가 내 문제를 실제로 변경했는지 확신 할 수 없으므로 문제를 설명하면서 가능한 한 짧게 바로 표시된 코드 조각을 유지하기로 결정했습니다.
나는 그 NHibernate doesn't support intersection을 읽었는데, 아마도 매우 복잡하게되지 않고 하나의 쿼리에서 성취 할 수 없을까?
생각은 명확해야한다,하지만 난 그것을 실행하려고 할 때 그것을 밖으로 오류가 발생한. 그것은 분명히 내 원래 tasksFromQueue 쿼리에서 직접 번역 아니에요. 나는 나중에 그것을 가지고 놀려고 노력할 것이다. –
실행하면 쿼리를 게시 할 수 있습니까? 나는 당신과 같은 유스 케이스를 가진 다른 사람들이있을 것이라고 확신한다. – Firo