2016-11-16 2 views
0

Если у меня есть обнуляемое битовое поле (под названием «Disabled») и данные следующим образом:Nullable поля Bit истинные или ложные обнаружения

ID | Name | Disabled 
-------------------- 
1 | Mine | null 
2 | Yours| 1 

Если я затем выполнить следующую Linq To Entities заявления значения не является вернулся:

from r in Rates 
where r.Disabled != true 
select r 

Но если я выполняю этот Linq To Entities заявление:

from r in Rates 
where r.Disabled == true 
select r 

Он возвращает expecte d одна строка с идентификатором 2.

Я хочу, чтобы первый оператор возвращал строку 1, где значение поля «Отключено» равно null.

Я пропустил здесь трюк? Почему первый оператор не возвращает нулевую строку?

Редактировать Позвольте мне перефразировать вопрос ... Почему он не возвращает нулевые строки? Я знаю, что могу поставить простой нулевой чек.

+3

'NULL! = True' return false –

+1

Попробуйте заменить' где r.Disabled! = True' с 'where (r.Disabled ?? false)! = True' Это заменит любой нуль, найденный с помощью false для этого сравнения. –

+0

@JuanCarlosOropeza Это самое нелогичное ... NULL! = True return false означает, что NULL == true?!?!?!?!?!? –

ответ

2
from r in Rates 
where r.Disabled != true 
    || r.Disabled IS NULL 
select r 
+0

Это неверный код для Linq To Entities ... он должен читать r.Disabled! = True || r.Disabled == null –

+0

Принимая во внимание информацию, которую вы мне представили, я буду отмечать это как ответ ... спасибо! –

+0

Кстати ... Я решил пойти с немного более логичным ... r.Disabled == false || r.Disabled == null –

1

Как вы сказали, у вас есть nullable bool. Вы можете проверить значение null на HasValue.

bool? nullableBool = null; 
if (nullableBool.HasValue == false) 
    { 
     //Null 
    } 

Если вы хотите, чтобы лечить false и null так же, как и "НЕ ИСТИНА", то вы можете использовать GetValueOrDefault propertry

bool? nullableBool = false; 

или bool? nullableBool = false;

В любом из этих двух случаев, это if Условие встретится.

if (!nullableBool.GetValueOrDefault(false)) 
    { 

    } 

Вы можете использовать эту логику в своем коде.

+0

Спасибо, но мне нужно сделать это в запросе ... и если я получу эту ошибку «NotSupportedException: LINQ to Entities не распознает метод Boolean GetValueOrDefault (Boolean)», и это метод не может быть переведен в выражение хранилища ». –

+0

Что относительно HasValue? –

 Смежные вопросы

  • Нет связанных вопросов^_^