NHibernate выполнение запроса с ограничениями

#c# #nhibernate #linq-to-nhibernate #queryover

#c# #nhibernate #linq-to-nhibernate #выполнение запроса

Вопрос:

Я новичок в NHibernate и пытаюсь использовать QueryOver . У меня есть следующий запрос NHibernate

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

У меня есть единственное значение для передачи в IsIn, и для этого я должен создать новый список ( new List<int> {100} )). Есть ли более чистый способ сделать это?

Ответ №1:

Ваш синтаксис в порядке, и можно внести лишь несколько изменений или улучшений… вот они:

 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. Простые выражения