from linq nhibernate linq-to-nhibernate

from - NHibernate.Linq LIKE



linq where list contains (4)

Con NH 4 (y probablemente un poco antes), una extensión de cadena Like incorporada está disponible dentro del espacio de nombres NHibernate.Linq : Like(this string matchExpression, string sqlLikePattern) . (Se define en la clase de extensión NHibernate.Linq.SqlMethods ).

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

¿Cómo puedo producir esta consulta usando NHibernate.Linq?

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

Tenga en cuenta que esto no es Linq To Sql o Entity Framework. Esto es NHibernate.

Editar:

Aquí está la consulta deseada usando ICriteria:

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


Creo que esto es lo que estás buscando:

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

De acuerdo con mis pruebas, genera una declaración SQL ''LIKE'': "... WHERE theater.Name LIKE% test%"

que es exactamente el resultado del fragmento de criterios que ha proporcionado.


Si bien esto se ha marcado como resuelto, lo que era correcto en ese momento, también puedo señalar que NHibernate tiene algunas extensiones ahora, por lo que puede hacer lo siguiente:

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

Esto hará un LIKE ''%something%'' por ti.


Tuve el mismo problema en mi proyecto y encontré una solución:

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

Esto se traduce en SQL para

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