Tengo una entidad y su mapeo:¿NHibernate LINQ es compatible con ToLower() en cláusulas Where()?
public class Test
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
}
public class TestMap : EntityMap<Test>
{
public TestMap()
{
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Description);
}
}
Estoy tratando de ejecutar una consulta en el mismo (a agarrarlo de la base de datos):
var keyword = "test" // this is coming in from the user
keyword = keyword.ToLower(); // convert it to all lower-case
var results = session.Linq<Test>
.Where(x => x.Name.ToLower().Contains(keyword));
results.Count(); // execute the query
Sin embargo, cada vez que corro esta consulta, me sale el siguiente excepción:
Index was out of range. Must be non-negative and less than the size of the
collection. Parameter name: index
Estoy en lo cierto cuando digo que, en la actualidad, LINQ to NHibernate no apoya ToLower()
? Y si es así, ¿hay alguna alternativa que me permita buscar una cadena en el medio de otra cadena con la que sea compatible Linq a NHibernate? Por ejemplo, si el usuario busca kap
, lo necesito para que coincida con Kapiolani
, Makapuu
y Lapkap
.
¿Por qué crees que el problema está en la llamada a ToLower()? Es un método estándar definido en la clase String y no debería tener nada que ver con NHibernate LINQ. ¿En qué línea de la fuente de arriba obtienes la excepción? – Slavo
En 'results.Count()', ya que es cuando se evalúa. Y tiene mucho que ver con Linq a NHibernate, ya que necesita convertirlo a SQL. –
Ese proveedor de Linq es bastante viejo y no se ha actualizado por un tiempo. Podría funcionar, pero también podría probar con el proveedor de Linq más nuevo en el enlace de NHibernate. –