今天nDepend和CQL是否可以直接使用派生类的类来请求类?

时间:2011-04-21 09:49:40

标签: ndepend cql cqlinq

阅读了很多Q和帖子,看到在下一个版本之前不支持子查询/嵌套查询/查询组合。但是我不确定这是否是我需要的东西,在我看来我会这样写,但我可能会让事情变得复杂。

我想它就像

WARN IF Count > 0 IN
SELECT TYPES WHERE
      IsDirectlyUsing "MTNE.Web.OneWeb.^.*\p{Proxy}+$" IN
      SELECT TYPES WHERE DeriveFrom "System.Web.Services.Protocols.SoapHttpClientProtocol"

所以我想做的是检查类型是否直接使用具有后缀Proxy的给定命名空间中的其他类型,并且代理类型是从SoapHttpClientProtocol派生的。如果某个类型是直接使用代理类型发布警告。

任何人的建议,提示,提示,指示或答案?

1 个答案:

答案 0 :(得分:0)

使用Code Rule over LINQ Query (CQLinq)编写查询的方法有多种。当然,最优雅,简洁和优化的方式是:

warnif count > 0
let soapClientTypes = Application.Types.Where(t => t.DeriveFrom("System.Web.Services.Protocols.SoapHttpClientProtocol"))
let mnteTypes = Application.Types.WithFullNameLike(@"MTNE.Web.OneWeb.^.*\p{Proxy}+$").ToHashSet()
from t in soapClientTypes.UsingAny(mnteTypes)
select new { t, 
             mnteTypesUsed = t.TypesUsed.Intersect(mnteTypes) }

注意we first define 2 sets的方式,并使用扩展方法ToHashSet()来优化Intersect()方法的执行。

另请注意方法UsingAny()的用法,该方法在一次调用中执行大量工作。