Мне нужно было отфильтровать список результатов, используя комбинацию двух свойств. Простой SQL-оператор будет выглядеть так:
SELECT TOP 10 *
FROM Person
WHERE FirstName + ' ' + LastName LIKE '%' + @Term + '%'
ICriteria в NHibernate, который я в итоге использовал, был:
ICriteria criteria = Session.CreateCriteria(typeof(Person));
criteria.Add(Expression.Sql(
"FirstName + ' ' + LastName LIKE ?",
"%" + term + "%",
NHibernateUtil.String));
criteria.SetMaxResults(10);
Это работает отлично, но я не уверен, является ли это идеальным решением, так как я все еще изучаю API Критерии NHibernate. Каковы рекомендуемые альтернативы?
- Есть ли что-то кроме
Expression.Sql
, которое выполняло бы ту же операцию? Я пытался Expression.Like
, но не мог понять, как объединить имя и фамилию.
- Должен ли я сопоставить свойство FullName с формулой "FirstName + '' + LastName" в классе отображения?
- Должен ли я создать свойство FullName только для чтения для объекта домена и затем сопоставить его со столбцом?