Как сопоставить столбец NULL, используя LINQtoSQL и лямбду? - PullRequest
1 голос
/ 17 августа 2010

У меня есть время, когда я пытаюсь сопоставить строки с нулевым столбцом. Я знаю, что в SQL я должен использовать ключевое слово IS, чтобы найти пустые столбцы:

SELECT * FROM Categories WHERE ParentCategoryID IS NULL;

Я пытаюсь воссоздать указанный выше запрос в LINQtoSQL. Я пробовал:

var RootCats = categoriesRepository.Categories
    .Where(c => c.ParentCategoryID == null);

Но это не возвращает никаких записей вообще. Я нашел несколько постов, которые используют синтаксис, отличный от того, к которому я привык в этом посте здесь . Но у меня были трудности с переводом этого принципа в форму лямбды.

Как использовать выражения LINQtoSQL и Lambda для поиска строк с нулевыми столбцами?

Редактировать

За вопрос в комментариях - ParentCategoryID является целым числом.

Ответы [ 4 ]

4 голосов
/ 17 августа 2010

Если ParentCategoryID в вашей модели не обнуляется, он получит значение по умолчанию 0 и 0! = Null.Откройте конструктор и измените ParentCategoryID так, чтобы он мог обнуляться.

0 голосов
/ 17 августа 2010

Я недавно обнаружил, что использование object.equals (myobj, null) работает для этого и может быть включено в саму лямбду, поэтому довольно аккуратно.

0 голосов
/ 17 августа 2010

За допрос Джеспера я сделал Category.ParentCategoryID обнуляемым int и все работает хорошо!

0 голосов
/ 17 августа 2010

Чтобы явно попытаться форсировать SQL IS NULL, попробуйте что-то вроде этого,

int? foo=null;
var RootCats = categoriesRepository.Categories
    .Where(c => c.ParentCategoryID == foo );

В моем тестовом коде LINQPad показывает результирующий SQL как: WHERE [t0].[ParentID] IS NULL

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