Как исключить один тип объекта из запроса LINQ
-
28-10-2019 - |
Вопрос
Для одного на своем модульном тесте я разрабатываю запрос LINQ, который извлекает все типы контроллеров из проекта MVC и убедитесь, что он унаследовал от базового контроллера.
var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom);
Как я могу удалить из этого списка объект BaseController? Я пробовал несколько вещей, но это всегда удаляет из списка все контроллеры, которые не наследуют от базового концертлера.
Вот модульный тест
[Fact]
public void All_Controllers_Inherit_From_BaseController()
{
var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom);
foreach (var controller in controllers)
{
Assert.True(controller.BaseType == typeof(BaseController));
}
}
Спасибо!
Решение
Ну, на ум приходят два варианта:
Явно "удалить"
BaseController
с использованиемExcept
:var controllers = typeof(MvcApplication).Assembly .GetTypes() .Except(new[] { typeof(BaseController) }) .Where(typeof(IController).IsAssignableFrom);
Рассмотрим только конкретные типы; Я предполагаю
BaseController
Аннотация:var controllers = typeof(MvcApplication).Assembly .GetTypes() .Where(type => !type.IsAbstract) .Where(typeof(IController).IsAssignableFrom);
Не связан с StackOverflow