linq to sql проверка на ноль - PullRequest
7 голосов
/ 07 марта 2011

поле моей базы данных int_ParentId состоит из значения Null.Как бы я проверить его на ноль в этом запросе linq.это не работает

  return _db.Categories.Where(m => m.int_ParentId==null);

Ответы [ 4 ]

26 голосов
/ 07 марта 2011

Вы указали в поле int_ParentId базы данных тип int? (например, <Column Name="int_ParentId" Type="System.Int32" DbType="Int" CanBeNull="true" />)? Если да, то оба:

return _db.Categories.Where(m => m.int_ParentId == null);

и

return _db.Categories.Where(m => m.int_ParentId.HasValue);

должно работать.

5 голосов
/ 07 марта 2011

На этот вопрос трудно ответить, учитывая отсутствие контекста, который вы предоставляете, хотя обычно _db.Categories.Where(m => m.int_ParentId.Equals(null)); делает то, что вы хотите.

Существует пара несоответствий между CTS (системой типов .NET) и системой типов SQL.

См. Несоответствия типов SQL-CLR - MSDN и Нулевая семантика - MSDN для полной ссылки.

Особенно ноль вызовет у вас головную боль, если вы не будете достаточно внимательны, поскольку в соответствующих системах типов оно имеет два совершенно разных значения. NULL в SQL означает «значение отсутствует, будет соответствовать любому сравнению», в то время как null в .NET означает «отсутствие объекта, сравнение с нулем всегда приведет к значению false».

2 голосов
/ 07 марта 2011

Я думаю, что вы хотите использовать метод Equals объекта:

return _db.Categories.Where(m => m.int_ParentId.Equals(null)); 
0 голосов
/ 09 мая 2012

У меня есть этот запрос, работающий в этом сценарии

YourContext db = new YourContext();
List<entity> list =  (from n in db.YourEntity
                     where n.FieldToCheck.Equals(null)
                     select n).ToList();

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...