2014-07-07 5 views
2

저는 NHibernate에 익숙하며 QueryOver을 사용하려고합니다. 나는 ISIN에 전달하는 단일 값을 가지고 있고 그것을 위해 I가 새 목록에있는 다음 NHibernate에 쿼리제한이있는 NHibernate QueryOver

var departments = session 
    .QueryOver<Department>() 
    .Where(Restrictions.On<Department>x=> x.Parent.Id).IsIn(new List<int> {100})) 
    .List().ToList(); 

이 (new List<int> {100})). 이 작업을 수행하는 더 깨끗한 방법이 있습니까?

답변

3

귀하의 구문을 확인하고, 단지 몇 가지 변경 또는 개선은 여기에 ... 수행 할 수 있습니다

IList<Department> departments; 
var parents = new List<int> {167}; 

// advantage of this "original" QueryOver is, that it can accept 
// more parent IDs.. not only one "100" as in our example 
// so if we neet children of 100,101,102 
// we can get more from this syntax: new List<int> {100, 101,102...}; 
departments = session 
    .QueryOver<Department>() 
    .Where(Restrictions.On<Department>(x=> x.Parent.Id) 
     .IsIn(parents)) 
    .List(); 

// this style is just a bit more straightforward 
// saving few chars of code, using 'WhereRestrictionOn' 
departments = session 
    .QueryOver<Department>() 
    .WhereRestrictionOn(x => x.Parent.Id).IsIn(parents) 
    .List(); 

// in case we do have the only one parent ID to search for 
// we do not have to use the IS IN 
departments = session 
    .QueryOver<Department>() 
    .Where(x => x.Parent.Id == 100) 
    .List(); 

더보기 : 16.2. Simple Expressions