C# linq 如何按组中的对象过滤组列表

C# linq how to filter a list of groups by the objects in the group

我有 MyObject 的列表

class MyObject 
{
    int Id { get; set; }
    int SequenceNumber { get; set; }
    bool Approved { get; set;}
}

我需要获取 max SequenceNumber 其中 all 具有该序列号的对象将具有 Approved 作为 true.

多个对象可以有相同的序号,有些序号可能不会被使用(可能有序号为1, 2, 4的对象,没有3的对象)

我的想法是使用

Objects.GroupBy(f => f.SequenceNUmber).ToList();

但我不知道如何过滤我从中获得的群组列表。

是否有另一种方法可以在所有对象都获得批准的情况下获得最高序列号,或者我是否只需要以某种方式过滤组列表?

嗯,有了

IEnumerable<MyObject> Objects = ...

我们可以查询为

var result = Objects
  .GroupBy(item => item.SequenceNumber)
  .Where(group => group.All(item => item.Approved))
  .Max(group => group.Key);

如果有可能的话,我们没有任何 SequenceNumber所有对应的对象 是 Approved 并且我们想要 return 一些 默认值 (比如 -1)在这种情况下:

var result = source
  .GroupBy(item => item.SequenceNumber)
  .Where(group => group.All(item => item.Approved))
  .Select(group => group.Key)
  .DefaultIfEmpty(-1)
  .Max();