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