如何使用 CQLinq 在单个查询中获取方法和字段的指标

How to use CQLinq to get metrics of Methods and Fields within a single query

我在 NDepend 中使用 CQLinq 计算标识符的平均长度,我想获得 类、字段和方法的名称的长度。我浏览了 CQlinq 的这个页面:http://www.ndepend.com/docs/cqlinq-syntax,我有这样的代码:

let id_m = Methods.Select(m => new { m.SimpleName, m.SimpleName.Length })
let id_f = Fields.Select(f => new { f.Name, f.Name.Length })
select id_m.Union(id_f)

它不起作用,一个错误说:

'System.Collections.Generic.IEnumerable' does not contain a definition for 'Union'...

另一个是:

cannot convert from 'System.Collections.Generic.IEnumerable' to 'System.Collections.Generic.HashSet'

但是,根据MSDN,IEnumerable 接口定义了 Union() 和 Concat() 方法。

在我看来,我不能像使用 Linq 一样使用 CQLinq。不管怎样,有没有办法在单个查询中从类型、方法和字段域中获取信息?

非常感谢。

is there a way to get the information from Types, Methods and Fields domains within a singe query?

暂时不行,因为一个CQLinq查询只能匹配一个类型序列,或者一个方法序列或者一个字段序列,所以你需要3个不同的代码查询。

对于下一个版本的 CQLinq,将会有很大改进,实际上你将能够编写如下内容:

from codeElement in Application.TypesAndMembers 
select new { codeElement, codeElement.Name.Length }

下一个版本将在 2016 年底前推出。