Подтвердить что ты не робот

NHibernate.Linq LIKE

Как я могу создать этот запрос, используя NHibernate.Linq?

WHERE this_.Name LIKE @p0; @p0 = 'test'  // Notice NO % wild card

Обратите внимание: это не Linq To Sql или Entity Framework. Это NHibernate.

Edit:

Вот требуемый запрос с использованием ICriteria:

criteria.Add(Expression.Like("Name", "test"));
return criteria.List<Theater>();
4b9b3361

Ответ 1

С NH 4 (и, вероятно, немного раньше) встроенное расширение строки Like доступно в пространстве имен NHibernate.Linq: Like(this string matchExpression, string sqlLikePattern). (Он определен в NHibernate.Linq.SqlMethods классе расширения.)

using NHibernate.Linq;
...
session.Query<Theater>()
    .Where(t => t.Name.Like("test"));

Ответ 2

Пока это было отмечено как разрешенное, которое было правильным в то время, могу ли я также отметить, что NHibernate имеет некоторые расширения сейчас, поэтому вы можете сделать следующее:

Session.QueryOver<MyEntity>()
    .Where(x => x.Property.IsLike("something", MatchMode.Anywhere))
    .List();

Это сделает LIKE '%something%' для вас.

Ответ 3

Я считаю, что это то, что вы ищете:

var theaters = from theater in Session.Linq<Theater>() 
               where theater.Name.Contains("test") 
               select theater;

По моим тестам он генерирует инструкцию SQL LIKE: "... WHERE theatre.Name LIKE% test%"

который является результатом вывода кода критериев, который вы предоставили.

Ответ 4

У меня была такая же проблема в моем проекте и я нашел решение:

session.Linq<Theater>()
    .Where(x => x.Name.StartsWith("test") && x.Name.EndsWith("test");

Это переводит в SQL на

SELECT ... WHERE Name LIKE '%test' AND Name LIKE 'test%'