2010-02-16 3 views
0

내 시스템 사용자는 0 개 이상의 카테고리를 소유하고 있습니다. 여기 내 모델 클래스의 단순화 된 버전입니다 :ICriteria 인터페이스가있는 NHibernate 컬렉션에없는 객체 선택

public class User 
{ 
    public virtual String Name {get; set;} 
    public virtual IList<Category> Categories { get; set; } 
} 

public class Category 
{ 
    public virtual String Title {get; set;} 
} 

지금 사용자에게 할당되지 않은 모든 범주를 선택하는 ICriteria 쿼리를 만들려는,하지만 난 갇혔어요. 이상적으로 나는 카테고리에서 사용자에게 네비게이션 프로퍼티를 생성하고 싶지 않지만 NHibernate에 대한 초보자 지식 만 가지고 볼 수있는 유일한 솔루션입니다.

현재 데이터 모델 클래스에서이 작업을 수행 할 ICriteria 쿼리가 있습니까?

도움 주셔서 감사합니다.

+0

카테고리는 한 명의 사용자 만 소유 할 수 있다고 가정하는 것이 안전한가요? Category 테이블에 데이터베이스 테이블의 User 테이블에 대한 외래 키가 있다고 가정하는 것이 안전한가요? –

+0

범주는 한 명의 사용자 만 소유하며 Category 테이블에는 User의 외래 키가 들어 있습니다. –

답변

1

이것은 머리 꼭대기에 있지만 유용한 포인터 일 수 있습니다.

var crit = _session.CreateCriteria<Category>("c") 
         .Add(
         Subqueries.PropertyNotIn("c.id", 
          DetachedCriteria.For<User>("u") 
           .CreateCriteria("Categories","uc") 
           .SetProjection(Projections.Property("uc.id"))          
         )); 
var unassignedCategories = crit.List<Category>(); 

당신은 아마 여기에 생성 될 SQL에 대한 느낌 얻을 수 있습니다 :이 도움이

select c.* from categories where c.id not in (select uc.id from usercategories) 

희망, 미안 나는 그것을 :)

을 테스트 할 수 없었다 Tobin

+0

똑똑하고, 처음으로 일했습니다. –

관련 문제