... и это, возможно, худшее решение в c # / linq. Он удалит все, кроме одной из повторяющихся точек данных, точек данных с Id = 2 и 5.
void Main()
{
var datapoints = new List<Datapoint>();
datapoints.Add(new Datapoint() { Id = 1, EtfId = "A", EtfDate = new DateTime(2020, 6, 1) });
datapoints.Add(new Datapoint() { Id = 2, EtfId = "A", EtfDate = new DateTime(2020, 6, 1) });
datapoints.Add(new Datapoint() { Id = 3, EtfId = "A", EtfDate = new DateTime(2020, 6, 2) });
datapoints.Add(new Datapoint() { Id = 4, EtfId = "B", EtfDate = new DateTime(2020, 6, 1) });
datapoints.Add(new Datapoint() { Id = 5, EtfId = "B", EtfDate = new DateTime(2020, 6, 1) });
var duplicates = datapoints
.GroupBy(g => new { g.EtfId, g.EtfDate })
.Select(g => new { g.Key.EtfId, g.Key.EtfDate, Count = g.Count() })
.Where(g => g.Count > 1);
var datapointsToremove = new List<int>();
foreach (var d in duplicates)
{
var removeDataPoints = datapoints
.Where(x => x.EtfId == d.EtfId && x.EtfDate == d.EtfDate).Skip(1)
.Select(x => x.Id);
foreach (var rd in removeDataPoints)
{
datapointsToremove.Add(rd);
};
};
foreach (var dtr in datapointsToremove)
{
datapoints.Remove(datapoints.FirstOrDefault(d => d.Id == dtr));
}
}
public class Datapoint
{
public int Id { get; set; }
public string EtfId { get; set; }
public DateTime EtfDate { get; set; }
}
И еще это навеяно var ownItems = items.GroupBy (x => x.Id). Выберите (y => y.First ()); см. Удалите дубликаты в списке с помощью linq
void Main()
{
var datapoints = new List<Datapoint>();
datapoints.Add(new Datapoint() { Id = 1, EtfId = "A", EtfDate = new DateTime(2020, 6, 1) });
datapoints.Add(new Datapoint() { Id = 2, EtfId = "A", EtfDate = new DateTime(2020, 6, 1) });
datapoints.Add(new Datapoint() { Id = 3, EtfId = "A", EtfDate = new DateTime(2020, 6, 2) });
datapoints.Add(new Datapoint() { Id = 4, EtfId = "B", EtfDate = new DateTime(2020, 6, 1) });
datapoints.Add(new Datapoint() { Id = 5, EtfId = "B", EtfDate = new DateTime(2020, 6, 1) });
datapoints.Dump();
var distinctItems = datapoints.GroupBy(x => new { x.EtfId, x.EtfDate}).Select(y => y.First());
}
class Datapoint
{
public int Id {get;set;}
public string EtfId {get;set;}
public DateTime EtfDate {get;set;}
}
... что является гораздо более элегантным решением, но не поможет избавиться от дубликатов в базе данных.