我的主要问题在于理解IGrouping<int, SubForm>
。我想要最频繁的对象(MyClass
)。这是我现在的代码:
var subForm =
classes.GroupBy(c => c.SubFormId)
.OrderByDescending(sf => sf.Count())
.FirstOrDefault();
这将返回IGrouping<int, SubForm>
。要获得实际的对象,我必须执行另一个FirstOrDefault()
,但编译器显示可能存在null异常。这是获得实际子表单的代码,它能做得更好吗?
var subForm =
classes.GroupBy(c => c.SubFormId)
.OrderByDescending(sf => sf.Count())
.FirstOrDefault().FirstOrDefault().SubForm;
您可以检查以确保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;
我想你想要:
var sfGroup = classes.GroupBy(c => c.SubFormId)
.OrderByDescending(sf => sf.Count())
.FirstOrDefault();
int count = sfGroup.Count();
MyClass subForm = sfGroup.FirstOrDefault();
您可以使用First
。如果什么都没找到,它会抛出一个异常。
var subForm = classes.GroupBy(c => c.SubFormId)
.OrderByDescending(sf => sf.Count())
.FirstOrDefault();
return subForm == null ? default(SubForm) : subForm.Select(s => s.SubForm);
您缺少一个选择:
var subForm = (
from c in classes
group c by c.SubFormId into g
select g.Key)
.FirstOrDefault();