Reputation: 7543
I have the following List definition:
class ListItem
{
public int accountNumber { get; set; }
public Guid locationGuid { get; set; }
public DateTime createdon { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<ListItem> entitiesList = new List<ListItem>();
// Some code to fill the entitiesList
}
}
There are duplicates in the accountNumbers of the entitiesList. I want to find the duplicate accountNumbers, do an action on the locationGuids with a createdon date that is not the most recent createdon date of the duplicates. How can I manipulate the list to get only for the duplicates the accountNumber, most recently created locationGuid and the (older) locationGuids?
Upvotes: 4
Views: 6374
Reputation: 13755
List<ListItem> entitiesList = new List<ListItem>();
var filtered = entitiesList.GroupBy(x => x.accountNumber).Where(g => g.Count() > 1).ToList().OrderByDescending(x => x.createdon);
Upvotes: 0
Reputation: 27085
List<ListItem> entitiesList = new List<ListItem>();
//some code to fill the list
var duplicates = entitiesList.OrderByDescending(e => e.createdon)
.GroupBy(e => e.accountNumber)
.Where(e => e.Count() > 1)
.Select(g => new
{
MostRecent = g.FirstOrDefault(),
Others = g.Skip(1).ToList()
});
foreach (var item in duplicates)
{
ListItem mostRecent = item.MostRecent;
List<ListItem> others = item.Others;
//do stuff with others
}
Upvotes: 3
Reputation: 116098
duplicates = entitiesList.GroupBy(e => e.accountNumber)
.Where(g => g.Count() > 1)
.Select(g => g.OrderByDescending(x => x.createdon));
Upvotes: 2