Поиск текста содержит с QueryOver
Я пытаюсь сделать это:
var list = Session.QueryOver<Person>()
.Where(x => x.LastName.Contains(searchText))
.List<Person>();
но я получаю эту ошибку: Нераспознанный вызов метода: System.String:Boolean Contains(System.String)
У тебя есть идея?
Обновить:
public class Person
{
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
}
4 ответа
NHibernate не имеет прямого эквивалента C#, как упомянуто по этой ссылке http://nhibernate.info/blog/2009/12/17/queryover-in-nh-3-0.html
Дополнительные ограничения
Некоторые операторы / функции SQL не имеют прямого эквивалента в C#. (например, SQL, где имя похоже на "% anna%"). Эти операторы имеют перегрузки для QueryOver в классе Restrictions, поэтому вы можете написать:
.Where (Restrictions.On (c => c.Name).IsLike ("% anna%"))
Существует также встроенный синтаксис, чтобы избежать квалификации типа:
.WhereRestrictionOn (c => c.Name).IsLike ("% anna%")
Похоже, QueryOver не поддерживает метод Contains. Вы можете попробовать с ограничением IsLike:
Запрос nhibernate, как с деревьями выражений
NHibernate 3.0 поиск с подстрокой
queryover и (x как 'a' или y как 'a')
var data = session.QueryOver<tablename>()
.JoinQueryOver<if another table present>(x => x.Empsals)
.WhereRestrictionOn(x => x.FName).IsLike("a%")
.List<EmployeeDetails>();