NHibernate.Linq LIKE

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

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

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

Редактировать:

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

criteria.Add(Expression.Like("Name", "test"));
return criteria.List();

Ответы на вопрос(4)

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

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

Согласно моим тестам он генерирует SQL 'ЛАЙК' заявление: "... ГДЕ театр. ИМЯ НРАВИТСЯ% test% "

это как раз вывод фрагмента критерия, который вы предоставили.

 mxmissile13 нояб. 2009 г., 20:14
Да, это мой вопрос. Причина, по которой дается критерий LIKE 'тестовое задание' возвращает значения с помощью 'ТЕСТОВОЕ ЗАДАНИЕ' и не 'TESTEST», Или другими словамиТестовое задание' знак равнотестовое задание', Так что в основном это для игнорирования только случай. Надеюсь, что это имеет смысл.
 tolism711 нояб. 2009 г., 16:42
Итак, вы хотите сгенерировать НРАВИТСЯ статистику БЕЗ% вокруг вашей строки поиска. Как вы говорите, вы делаете это уже с Criteria, но вы хотите добиться того же с LINQ. Я прошу прощения за неправильное прочтение вашего первоначального комментария ... Могу ли я спросить, почему кто-то хотел бы сделать это? Я полагаю, что оператор LIKE без подстановочных знаков такой же или, по крайней мере, оптимизирован так же, как и использование '=' оператор.
 mxmissile11 нояб. 2009 г., 15:44
Вопрос в том, что я нея не хочу использовать символы подстановки, используя Linq. Мой комментарий выше отвечал на ваш ответименно вывод предоставленного вами фрагмента критерия ", Извините, если мне было непонятно. Я могу достичь желаемого запроса с помощью ICriteria, как указано в Вопросе, но, похоже, не могу выполнить его с помощью Linq.
 tolism709 нояб. 2009 г., 18:08
Я только что выполнил модульный тест, который у меня есть, с кодом, приведенным в моем ответе, и он выдал SQL-оператор с символом% в обоих концах строки поиска. Я также запускаю тот же тест, используя эквивалентный критерий, и получаю точно такой же оператор SQL, если использую критерии. Добавить (Expression.Like ("Название", "тестовое задание", MatchMode.Anywhere)); Я использую NHibernate 2.1 с SQL Server 2005. Если вы используете ту же конфигурацию, вы сможете увидеть те же результаты.
 mxmissile09 нояб. 2009 г., 16:55
Используя Критерии (предоставленные в вопросе), я не вижу генерируемых групповых символов%.

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

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

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

 Kezzer24 окт. 2012 г., 18:19
Между прочим, они не из коробки, а изготовлены на заказ.
 Phil06 февр. 2014 г., 18:14
Вопрос о Linq для NHibernate, а не о Query over.
 PJUK18 апр. 2013 г., 18:51
+1 именно то, что я искал, возможно, стоит отметить, чтобы решить точную проблему над вамиЯ хочу использовать MatchMode.Exact (без подстановочных знаков%)
 Russell B23 окт. 2013 г., 21:28
Пришлось добавитьusing NHibernate.Criterion; когда не используется Resharper. Но прекрасно работает! Благодарю.
Решение Вопроса

С 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"));
</theater>

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

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

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

SELECT ... WHERE Name LIKE '%test' AND Name LIKE 'test%'
 Mark Powell18 янв. 2013 г., 11:06
Возможно, я упускаю суть, но, конечно, вы нена самом делелайк' норавен ... .Где (x => x.Name.Equals (»тестовое задание");
 CMerat06 февр. 2014 г., 22:39
Я знаю. Вопрос касался LIKE без подстановочных знаков. Проверьте его комментарий в первой строке.
 J. Ed07 июл. 2011 г., 11:48
дополнение:&& x.Name.Length == "test".Length, иначе тыв конечном итоге с результатами, какtest blah blah blah test
 Phil06 февр. 2014 г., 18:10
Это не будет работать, если текст поиска находится в середине. Например, если вы введете "CKS», слово "Джексон» не придет.
 Johnny_D15 июл. 2013 г., 16:41
Это'действительно, как сказал @ n3rd.

Ваш ответ на вопрос