Нечеткий поиск по составному полному имени с использованием NHibernate

Я пытаюсь преобразовать следующий 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();

6
задан Community 23 May 2017 в 10:28
поделиться