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>();
Ответы
Ответ 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%'