using System.Collections.Generic;
public decimal RecordId { get; set; }
public string TableKey { get; set; }
public string Status { get; set; }
public DateTime EventTime { get; set; }
public string Perpetrator { get; set; }
public interface IEventRepository
IEnumerable<EventLogObj> GetEvents();
IEnumerable<EventLogObj> GetEventsFilter();
void DeleteEvent(decimal RecordId);
public class EventLogTests
EventLogObj eventLogObj, event1, event2, event3, event4, event5;
List<EventLogObj> events;
Mock<IEventRepository> mockEventsRepository;
IEventRepository EventsMockDatabase;
public static void Main()
var est = new EventLogTests();
est.StoreOnlyDuplicateDetailsFromRowsIntoCollection();
est.pickDuplicateEventWithLeastDate();
eventLogObj = new EventLogObj();
event1 = new EventLogObj() { RecordId = 1, TableKey = "PERSON_CODE=1", Status = "S", EventTime = Convert.ToDateTime("2013-07-15 14:00:00") };
event2 = new EventLogObj() { RecordId = 2, TableKey = "PERSON_CODE=2", Status = "S", EventTime = Convert.ToDateTime("2013-07-15 13:00:00") };
event3 = new EventLogObj() { RecordId = 3, TableKey = "PERSON_CODE=3", Status = "S", EventTime = Convert.ToDateTime("2013-07-15 13:00:00") };
event4 = new EventLogObj() { RecordId = 4, TableKey = "PERSON_CODE=2", Status = "S", EventTime = Convert.ToDateTime("2013-07-15 14:00:00") };
event5 = new EventLogObj() { RecordId = 5, TableKey = "PERSON_CODE=1", Status = "S", EventTime = Convert.ToDateTime("2013-07-15 13:00:00") };
events = new List<EventLogObj>() { event1, event2, event3, event4, event5 };
public void pickDuplicateEventWithLeastDate()
.GroupBy(s => s.TableKey)
.OrderByDescending(e => e.EventTime)
var duplicates2 = from res in events
group res by res.TableKey into g
MostRecent = g.OrderByDescending(x => x.EventTime)
Assert.AreEqual(2, duplicates.Count);
Assert.AreEqual(e1.EventTime, Convert.ToDateTime("2013-07-15 13:00:00"));
Assert.AreEqual(e2.EventTime, Convert.ToDateTime("2013-07-15 13:00:00"));
public void StoreOnlyDuplicateDetailsFromRowsIntoCollection()
var duplicates = events.GroupBy(s => s.TableKey)
.SelectMany(grp => grp.Skip(1)).ToList();
Assert.AreEqual(2, duplicates.Count);