LINQ:从第一个项目以外的每个组中选择全部

spo*_*rts 6 c# linq linq-to-entities

可以轻松选择每组中的第一组:

        var firstOfEachGroup = dbContext.Measurements
            .OrderByDescending(m => m.MeasurementId)
            .GroupBy(m => new { m.SomeColumn })
            .Where(g => g.Count() > 1)
            .Select(g => g.First());
Run Code Online (Sandbox Code Playgroud)

但是......
问题:如何从第一项除外的每个组中选择所有项目?

        var everythingButFirstOfEachGroup = dbContext.Measurements
            .OrderByDescending(m => m.MeasurementId)
            .GroupBy(m => new { m.SomeColumn })
            .Where(g => g.Count() > 1)
            .Select( ...? );
Run Code Online (Sandbox Code Playgroud)

附加信息:
我的真正目标是删除除最后一个之外的所有重复项(以批量方式,即:不使用内存中的foreach),因此在上一个查询之后我想使用RemoveRange:

 dbContext.Measurements.RemoveRange(everythingButFirstOfEachGroup);
Run Code Online (Sandbox Code Playgroud)

所以,如果我的问题毫无意义,这些信息可能会很方便.

Hab*_*bib 7

使用Skip(1)跳过第一个记录,并选择休息.

就像是:

var firstOfEachGroup = dbContext.Measurements
                    .OrderByDescending(m => m.MeasurementId)
                    .GroupBy(m => new { m.SomeColumn })
                    .Where(g => g.Count() > 1)
                    .SelectMany(g => g.OrderByDescending(r => r.SomeColumn).Skip(1));
Run Code Online (Sandbox Code Playgroud)

请参阅:Enumerable.Skip

如果您不需要拼合的集合SelectMany,请Select在代码段中替换.