private static ModelNode CreateProjectNode( IProjectMetric projectMetric, IProjectMetric[] projectMetrics, EvaluationResult[] evaluationResults) { var children = projectMetric.Dependencies.Select( y => { var couplings = projectMetric.NamespaceMetrics.SelectMany(x => x.ClassCouplings) .Where(x => x.Assembly == y.GetFileNameWithoutExtension()) .Select(x => new ModelNode(x.Namespace, NodeKind.Namespace, CodeQuality.Good, 0, 100, 0)) .Cast<IModelNode>() .ToList(); return new ModelNode( y.GetFileNameWithoutExtension(), NodeKind.Assembly, CodeQuality.Good, 0, 100, 0, couplings); }) .Concat( projectMetric.NamespaceMetrics.Select( namespaceMetric => CreateNamespaceNode( namespaceMetric, projectMetrics, evaluationResults.Where(r => r.Namespace == namespaceMetric.Name)))) .Merge() .ToList(); return new ModelNode( projectMetric.Name, NodeKind.Assembly, evaluationResults.Where(x => x.ProjectName == projectMetric.Name).GetQuality(), projectMetric.LinesOfCode, projectMetric.MaintainabilityIndex, projectMetric.CyclomaticComplexity, children); }