如何从Linq查询中排除一个对象类型

时间:2012-02-20 11:45:22

标签: linq asp.net-mvc-4

对于我的单元测试中的一个,我正在开发一个linq查询,该查询从MVC项目中检索所有控制器类型,并确保它继承自BaseController。

var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom);

如何从此列表中删除BaseController对象?我已经尝试了几件事,但它总是从列表中删除所有不从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));
        }
    }

谢谢!

1 个答案:

答案 0 :(得分:3)

嗯,我想到两个选择:

  • 使用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);