Я пытаюсь преобразовать следующий SQL в NHibernate:
SELECT * FROM dbo.Customer
WHERE FirstName + ' ' + LastName LIKE '%' + 'bob smith' + '%'
Я пытался сделать что-то подобное, но это не помогло:
name = "%" + name + "%";
var customers = _session.QueryOver()
.Where(NHibernate.Criterion.Restrictions.On(c => c.FirstName + ' ' + c.LastName).IsLike(name))
.List();
В основном я пытаюсь найти возможность найти имя клиента в текстовом поле с примером значения "bob smith" и для это для поиска в базе данных, используя выражение LIKE в приведенном выше SQL.
Если я собираюсь неправильно искать столбцы FirstName и LastName, пожалуйста, помогите мне с альтернативой, но приведенный выше запрос SQL дает мне то, что мне нужно.
Обновление с двумя решениями:
Итак, я нашел два решения этой проблемы. Один из них - использовать API критериев. В следующем сообщении есть ответ, который отлично работает: https://stackoverflow.com/a/2937100/670028
Другое решение, которое я нашел, благодаря одному из моих полезных коллег, который предложил использовать проекцию LINQ и анонимные типы . Вот решение с использованием LINQ:
var customers = session.Query()
.Select( x => new { FullName = x.FirstName + " " + x.LastName, Customer = x } )
.Where( x => x.FullName.Contains( "Bob Smith" ) )
.Select( x => x.Customer )
.ToList();