Linq лямбда нуль-коалесцирующий обнуляемый int - PullRequest
2 голосов
/ 09 января 2012

У меня есть модель категории, в которой поле ParentID имеет тип данных int? . Я пытаюсь добиться этого:

WHERE 
    ISNULL(ParentID,0) == ParentCategoryID

... в linq, но, похоже, изо всех сил, потому что он говорит мне, что я не могу применить ?? к ParentID, так как это целое число, которое можно обнулять.

IList<Category> ChildCategories = AllCategoriesAsList
    .Where(c => c.ParentID ?? 0 == ParentCategoryID)
    .ToList();

Я немного застрял.

Ответы [ 2 ]

4 голосов
/ 09 января 2012

Нечто подобное может сделать

IList<Category> ChildCategories = AllCategoriesAsList
    .Where(c => (c.ParentID.HasValue ? c.ParentID.Value : 0) == ParentCategoryID)
    .ToList();
1 голос
/ 09 января 2012

На самом деле не отвечаю на ваш вопрос напрямую, но учтите, что использование ISNULL () в фильтре Where может привести к сканированию таблицы / индекса

WHERE      ISNULL(ParentID,0) == ParentCategoryID

можно переписать как

WHERE (ParentId is NULL AND ParentCategoryId = 0) OR (ParentId = ParentCategoryId)

, который обычно должен иметь лучшую производительность. Аналог LINQ также позволил бы избежать проблемы объединения.

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