C# 为什么这个defaultIfEmpty选择ienumerable而不是string?
模块是一个字符串 字符串实现IEnumerable 您正在调用Enumerable.DefaultIfEmpty方法,该方法扩展了IEnumerable。 此方法只能返回IEnumerable 编辑:如果要用非空值替换模块的空值,可以使用空合并运算符:C# 为什么这个defaultIfEmpty选择ienumerable而不是string?,c#,linq,group-by,defaultifempty,C#,Linq,Group By,Defaultifempty,模块是一个字符串 字符串实现IEnumerable 您正在调用Enumerable.DefaultIfEmpty方法,该方法扩展了IEnumerable。 此方法只能返回IEnumerable 编辑:如果要用非空值替换模块的空值,可以使用空合并运算符: from a in mainDoc.XPathSelectElements("//AssembliesMetrics/Assembly/@Assembly") let aVal=a.Val
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( ) };
然而,由于where模块,模块实际上永远不会为空=空子句。
然后还应该从最后的select子句中删除??Other。模块是一个字符串
字符串实现IEnumerable
您正在调用Enumerable.DefaultIfEmpty方法,该方法扩展了IEnumerable。
此方法只能返回IEnumerable
编辑:如果要用非空值替换模块的空值,可以使用空合并运算符:
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( ) };
然而,由于where模块,模块实际上永远不会为空=空子句。
然后还应该从最后的select子句中删除??Other。因为在这种情况下,模块是一个字符串:
group aName by module ?? "SomeValue"
在对字符串调用任何IEnumerable扩展时,它将分解为IEnumerable。因为在本例中,模块是字符串:
group aName by module ?? "SomeValue"
当您对字符串调用任何IEnumerable扩展名时,它会分解为IEnumerable。如果不清楚,我有一个xml文件中的程序集列表,我想看看在一个感兴趣的模块名称空间中有多少个模块,以及感兴趣的模块名称或其他名称,如果它不是我特别感兴趣的模块名称,那么您希望它返回什么?为什么要调用它?因为我不想通过过滤掉模块为空的结果来创建组,那么为什么要使用where模块=无效的请参阅我的编辑。如果不清楚,我有一个xml文件中的程序集列表,我想看看在一个感兴趣的模块名称空间中有多少个模块,以及感兴趣的模块名称或其他名称,如果它不是我特别感兴趣的模块名称,那么您希望它返回什么?为什么要调用它?因为我不想通过过滤掉模块为空的结果来创建组,那么为什么要使用where模块=无效的请参阅我的编辑。