简体   繁体   English

Linq,IQueryable得到最频繁的元素对象

[英]Linq, IQueryable get most frequent element object

My main problem lies in understanding IGrouping<int, SubForm> . 我的主要问题在于理解IGrouping<int, SubForm> I want the most frequent object ( MyClass ). 我想要最频繁的对象( MyClass )。 This is the code I have now: 这是我现在的代码:

var subForm =
            classes.GroupBy(c => c.SubFormId)
            .OrderByDescending(sf => sf.Count())
            .FirstOrDefault();

This returns IGrouping<int, SubForm> . 这将返回IGrouping<int, SubForm> To get the actual object, I have to do another FirstOrDefault() but the compiler shows that there might be a null exception. 要获取实际对象,我必须执行另一个FirstOrDefault()但编译器显示可能存在空异常。 This is the code to get the actual subform, can it be done better? 这是获取实际子表单的代码,可以更好地完成吗?

var subForm =
            classes.GroupBy(c => c.SubFormId)
            .OrderByDescending(sf => sf.Count())
            .FirstOrDefault().FirstOrDefault().SubForm;

You could just check to make sure there is at least one item in your classes collection (so it is guaranteed there is at least one group) either at the end or the beginning: 您可以检查以确保您的classes集合中至少有一个项目(因此保证至少有一个组)在结束或开始时:

if(classes.Any())
{
    var subForm = classes.GroupBy(c => c.SubFormId)
                         .OrderByDescending(sf => sf.Count())
                         .First().First().SubForm;

}

Or: 要么:

var topGroup = classes.GroupBy(c => c.SubFormId)
                      .OrderByDescending(sf => sf.Count())
                      .FirstOrDefault();

if(topGroup!=null)
  subForm = item.First().SubForm;

I think you want: 我想你想要:

 var sfGroup = classes.GroupBy(c => c.SubFormId)
            .OrderByDescending(sf => sf.Count())                
            .FirstOrDefault();

  int count = sfGroup.Count();
  MyClass subForm = sfGroup.FirstOrDefault();

you could just use First . 你可以使用First It would throw an exception if nothing is found. 如果没有找到,它会抛出异常。

var subForm = classes.GroupBy(c => c.SubFormId)
    .OrderByDescending(sf => sf.Count())
    .FirstOrDefault();

return subForm == null ? default(SubForm) : subForm.Select(s => s.SubForm);

You are missing a select: 你错过了一个选择:

var subForm = (
    from c in classes
    group c by c.SubFormId into g
    select g.Key)
    .FirstOrDefault();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM