Текст поиска содержит с 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; }
}

person Kris-I    schedule 22.07.2012    source источник


Ответы (2)


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%")

person HatSoft    schedule 22.07.2012
comment
Спасибо, это работа. Но NNHProf предупреждает меня о проблемах с производительностью (с помощью «нравится»). Я могу сохранить свой текущий код, запрос Nhibernate и после запроса linq по результату. - person Kris-I; 22.07.2012

Похоже, QueryOver не поддерживает метод contains. Вы можете попробовать с ограничением IsLike:

nhibernate queryover LIKE с деревьями выражений
Поиск NHibernate 3.0 с подстрокой
запрос и (x как 'a' или y как 'a')

person Miroslav Popovic    schedule 22.07.2012