Nó rất dễ dàng để lựa chọn đầu tiên của mỗi nhóm:LINQ: Chọn tất cả từ mỗi nhóm trừ mục đầu tiên
var firstOfEachGroup = dbContext.Measurements
.OrderByDescending(m => m.MeasurementId)
.GroupBy(m => new { m.SomeColumn })
.Where(g => g.Count() > 1)
.Select(g => g.First());
Nhưng ...
Câu hỏi: làm thế nào tôi có thể chọn tất cả các từ mỗi nhóm ngoại trừ mục đầu tiên?
var everythingButFirstOfEachGroup = dbContext.Measurements
.OrderByDescending(m => m.MeasurementId)
.GroupBy(m => new { m.SomeColumn })
.Where(g => g.Count() > 1)
.Select(...?);
thông tin bổ sung:
mục tiêu thật sự của tôi là để xóa tất cả các bản sao ngoại trừ người cuối cùng (trong một cách lớn, ví dụ: không sử dụng một foreach trong bộ nhớ), vì vậy sau khi truy vấn trước đó tôi muốn sử dụng RemoveRange
:
dbContext.Measurements.RemoveRange(everythingButFirstOfEachGroup);
Vì vậy, nếu câu hỏi của tôi không có ý nghĩa, thông tin này có thể có ích.
Sử dụng '.Skip (1)' sau 'GroupBy (...)' sẽ bỏ qua nhóm đầu tiên và đó không phải là điều tôi muốn. Oh, bạn chỉnh sửa câu trả lời của bạn, bây giờ nó có ý nghĩa – sports
@sports, một cái gì đó như '.SelectMany (g => g.Skip (1));' sau khi mệnh đề where sẽ cung cấp cho bạn những gì bạn cần, tôi nghĩ. Bạn sẽ cần 'SelectMany' để làm phẳng bộ sưu tập của bạn. – Habib
Điều này cũng cần thiết: '.SelectMany (g => g.OrderByDescending (r => r.SomeColumn) .Skip (1));' – sports