Из кода кажется, что FilterItems()
возвращает true, если элемент находится в текущей категории или каких-либо подкатегориях?
Если это так, я думаю, что ваш текущий код имеет проблему: рекурсивный вызов FilterItems()
немедленно возвращает результат для первой подкатегории без проверки других подкатегорий
Здесьизмененный код:
public static bool InCategoryOrSubCategory(Item item, Category category)
{
return item.CategoryId == category.Id ||
category.Children.Any(subCategory => InCategoryOrSubCategory(item, subCategory));
}
Я изменяю имя на InCategoryOrSubCategory
, чтобы сделать его более понятным
Вот версия с карри, чтобы сделать вызов Where
немного приятнее (но сам методнемного более загадочно):
public static Func<Item, bool> InCategoryOrSubCategory(Category category)
{
return item =>
item.CategoryId == category.Id ||
category.Children.Any(subCategory => InCategoryOrSubCategory(subCategory)(item));
}
Использование:
items.Where(InCategoryOrSubCategory(category))