У меня есть объект и его отображение:
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);
}
}
Я пытаюсь выполнить запрос на нем (для захвата его из базы данных):
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
Однако каждый раз, когда я выполняю этот запрос, я получаю следующее исключение:
Index was out of range. Must be non-negative and less than the size of the
collection. Parameter name: index
Действительно ли я прав, когда я говорю, что в настоящее время Linq к NHibernate не поддерживает ToLower()
? И если так, есть ли альтернатива, которая позволяет мне искать строку посреди другой строки, с которой Linq к NHibernate совместим? Например, если пользователь ищет kap
, Мне нужен он для соответствия Kapiolani
, Makapuu
, и Lapkap
.
Это случилось недавно. Я могу сказать вам, что ToLower () не работает, а Contains () и StartsWith () работают и не чувствительны к регистру. Вы можете добиться желаемого эффекта, напрямую используя Contains () и StartsWith ().
Согласно комментариям в этих двух сообщениях блога , эта функция еще не реализована .
Вы можете проверить, использует ли база данных чувствительность к регистру.
Если нет, то вам не нужно .ToLower ()
Похоже, вокруг этого предмета много путаницы.
Содержит отображение
и StartsWith
для оператора LIKE
в SQL. Они сами не нечувствительны к регистру; именно сортировка делает их нечувствительными к регистру, поэтому это зависит от того, как был создан ваш столбец / схема. Обновление (2010-04-09): ошибка подтверждена, исправление отправлено, см. https://nhibernate.jira.com/browse/NH-2169
Обновление (2010-05-21): исправление был применен 01.05.2010 и сейчас работает как положено.