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
実際には決してなりません。次に、最終節から
も削除する必要があります。null
where 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 に答える