проверка linq to sql на null

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

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

4 ответов


вы отображенный вы 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);

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


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

есть несколько расхождений между CTS (.NETs type system) и система типов SQL.

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

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


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

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

У меня этот запрос работает в этом случае

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

надеюсь, что это помогает.