Поиск текста содержит с 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>();
WhereRestrictionOn(x => x.FName).IsLike("a%") use like this
Другие вопросы по тегам