阅读了很多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派生的。如果某个类型是直接使用代理类型发布警告。
任何人的建议,提示,提示,指示或答案?
答案 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()的用法,该方法在一次调用中执行大量工作。