Cómo excluir un tipo de objeto de una consulta de Linq
-
28-10-2019 - |
Pregunta
Para una en mi prueba unitaria, estoy desarrollando una consulta LINQ que recupera todos los tipos de controladores de un proyecto MVC y me asegura de que herede de un controlador base.
var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom);
¿Cómo puedo eliminar de esta lista el objeto Basecontroller? He probado varias cosas, pero siempre elimina de la lista todos los controladores que no heredan de BaseController.
Aquí está la prueba unitaria
[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));
}
}
¡Gracias!
Solución
Bueno, dos opciones me vienen a la mente:
Explícitamente "eliminar"
BaseController
usandoExcept
:var controllers = typeof(MvcApplication).Assembly .GetTypes() .Except(new[] { typeof(BaseController) }) .Where(typeof(IController).IsAssignableFrom);
Solo considere tipos de concreto; Asumo
BaseController
es abstracto:var controllers = typeof(MvcApplication).Assembly .GetTypes() .Where(type => !type.IsAbstract) .Where(typeof(IController).IsAssignableFrom);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow