我的主要问题在于理解IGrouping<int, SubForm>
。我想要最频繁的对象(MyClass
)。这是我现在的代码:
var subForm =
classes.GroupBy(c => c.SubFormId)
.OrderByDescending(sf => sf.Count())
.FirstOrDefault();
返回IGrouping<int, SubForm>
。要获取实际对象,我必须执行另一个FirstOrDefault()
,但编译器显示可能存在空异常。
这是获取实际子表单的代码,可以更好地完成吗?
var subForm =
classes.GroupBy(c => c.SubFormId)
.OrderByDescending(sf => sf.Count())
.FirstOrDefault().FirstOrDefault().SubForm;
答案 0 :(得分:1)
您可以检查以确保您的classes
集合中至少有一个项目(因此保证至少有一个组)在结尾或开头:
if(classes.Any())
{
var subForm = classes.GroupBy(c => c.SubFormId)
.OrderByDescending(sf => sf.Count())
.First().First().SubForm;
}
或者:
var topGroup = classes.GroupBy(c => c.SubFormId)
.OrderByDescending(sf => sf.Count())
.FirstOrDefault();
if(topGroup!=null)
subForm = item.First().SubForm;
答案 1 :(得分:1)
我想你想要:
var sfGroup = classes.GroupBy(c => c.SubFormId)
.OrderByDescending(sf => sf.Count())
.FirstOrDefault();
int count = sfGroup.Count();
MyClass subForm = sfGroup.FirstOrDefault();
答案 2 :(得分:0)
你可以使用First
。如果找不到任何内容,它会抛出异常。
答案 3 :(得分:0)
var subForm = classes.GroupBy(c => c.SubFormId)
.OrderByDescending(sf => sf.Count())
.FirstOrDefault();
return subForm == null ? default(SubForm) : subForm.Select(s => s.SubForm);
答案 4 :(得分:0)
您缺少一个选择:
var subForm = (
from c in classes
group c by c.SubFormId into g
select g.Key)
.FirstOrDefault();