Текст поиска содержит с 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; }
}
Ответы
Ответ 1
NHibernate не имеет прямого эквивалента С#, указанного в этой ссылке http://nhibernate.info/blog/2009/12/17/queryover-in-nh-3-0.html
Дополнительные ограничения
Некоторые SQL-операторы/функции не имеют прямого эквивалента в С#. (например, SQL, где имя типа "% anna%" ). Эти операторы перегрузки для QueryOver в классе ограничений, поэтому вы можете написать:
.Where(Restrictions.On(c = > c.Name).IsLike( "% anna%" ))
Существует также встроенный синтаксис, чтобы избежать квалификации типа:
.WhereRestrictionOn(c = > c.Name).IsLike( "% anna%" )
Ответ 2
Похоже, QueryOver не поддерживает метод Contains. Вы можете попробовать с ограничением IsLike:
nhibernate queryover LIKE с деревьями выражений
Поиск NHibernate 3.0 с подстрокой
queryover и (x как 'a' или y like 'a')
Ответ 3
var data = session.QueryOver<tablename>()
.JoinQueryOver<if another table present>(x => x.Empsals)
.WhereRestrictionOn(x => x.FName).IsLike("a%")
.List<EmployeeDetails>();
Ответ 4
WhereRestrictionOn(x => x.FName).IsLike("a%") use like this