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)
所以,如果我的问题毫无意义,这些信息可能会很方便.
使用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在代码段中替换.
| 归档时间: |
|
| 查看次数: |
5591 次 |
| 最近记录: |