У меня есть следующая проблема: у меня есть столбец с нулевым значением в моей таблице базы данных. Я хочу, чтобы добавить фильтр для него в предложение Where. Однако, когда столбец фактически равен нулю, я получаю сообщение об ошибке: «Ссылка на объект не установлена в экземпляр объекта».Fluent NHibernate Querying: проверка значений нулевых столбцов
public class MyClass
{
public virtual float? Id { get; set; }
}
// When querying:
...
MyClass myClass = null;
var query = GetCurrentSession().QueryOver<MyClass>(() => myClass);
// The following all give the same null reference error.
(1) query.Where(() => myClass.Id.ToString() == "...");
(2) query.Where(() => myClass.Id.Value.ToString() == "...");
(3) query.Where(() => myClass.Id != null && myClass.Id.ToString() == "...");
(4) query.Where(() => myClass.Id != null && myClass.Id.Value.ToString() == "...");
(5) query.Where(() => myClass.Id.HasValue && myClass.Id.ToString() == "...");
(6) query.Where(() => myClass.Id.HasValue && myClass.Id.Value.ToString() == "...");
Несколько похожая проблема можно найти here, но не помогло мне.
Похоже, что ленивая оценка внутри предложения Where не имеет места. У меня такое чувство, я пропускаю что-то очень очевидное здесь, но, похоже, не могу его найти.
ОБНОВЛЕНИЕ: Хорошо, поэтому, основываясь на предложении Новакова ниже, мне удалось исправить проблему сравнения с допустимым значением поплавка. Однако эта же проблема остается для (других) строковых значений. Например, я хочу иметь возможность сделать что-то подобное, и такое же исключение продолжает появляться, даже если я проверяю значение null в запросе.
query.WhereRestrictionOn(() => myClass.MyJoinedTable.MyField.ToLowerInvariant()).IsLike("%test%");
Вы пробовали простые() => myClass.Id == 0,5 & le; Я уверен, что он должен работать – Novakov