from a in mainDoc.XPathSelectElements("//AssembliesMetrics/Assembly/@Assembly")
let aVal=a.Value
where aVal.IsNullOrEmpty( )==false&&aVal.Contains(" ")
select aVal.Substring(0, aVal.IndexOf(' '))
into aName
let interestedModules=new[ ] { "Core", "Credit", "Limits", "Overdraft" }
where aName.Contains(".")
let module=
interestedModules
.FirstOrDefault(x => aName
.StartsWith(x, StringComparison.InvariantCultureIgnoreCase))
where module!=null
group aName by module.DefaultIfEmpty() // ienumerable<char>, why?
into groups
select new { Module=groups.Key??"Other", Count=groups.Count( ) };
2 に答える
4
moduleは文字列です。
文字列実装IEnumerable<char>.
Enumerable.DefaultIfEmptyを拡張するメソッドを呼び出していますIEnumerable<T>。
このメソッドは、 以外のものを返すことはできませんIEnumerable<T>。
EDITnull : の値を null 以外の値に置き換えたい場合moduleは、null 合体演算子を使用できます。
group aName by module ?? "SomeValue"
ただし、句のために、module実際には決してなりません。次に、最終節から
も削除する必要があります。nullwhere module!=null??"Other"select
于 2010-10-08T14:10:31.783 に答える
1
この場合、moduleは文字列であるため:
let module = interestedModules
.FirstOrDefault(x => aName
.StartsWith(x, StringComparison.InvariantCultureIgnoreCase))
文字列で IEnumerable 拡張のいずれかを呼び出すと、IEnumerable<char>.
于 2010-10-08T14:11:18.063 に答える