2017-05-08 6 views
1

Ist es möglich, Duplikate aus einer Datentabelle auf einem bestimmten Feld und eine BedingungC# Datentabelle Duplikate basierend auf dem Feld und Bedingung entfernen

Wie basiert zu entfernen, wenn ich die folgenden Datensätze:

Name: Ali

appointment_type: dental

appointment_date: 2017.08.05 08.00.00

Name: ali

appointment_type: dental

appointment_date: 2017.08.05 16.00.00

aus dem obigen Beispiel, der Patient Ali zwei Termine hat, mag ich den späteren Termin entfernen (s) (das ist auf 2017.08.05 16.00.00)

mit anderen Worten, alle Ernennung von Patienten „Ali“ entfernen und halten die früheste nur

ist es möglich, sie in LINQ zu tun?

+0

Zuerst filtern Sie sie in einem Wo und dann anwenden RemoveRange wie hier beschrieben: http://StackOverflow.com/questions/14746783/remove-all-but-the-first-item-in-a-list –

Antwort

1

Sie könnten GroupBy die Elemente wollen und OrderBy dann jede Gruppe auf AppointmentDate basieren, nehmen nur die First (frühesten) aus jeder Gruppe. Das Ergebnis wird der früheste Termin sein nur:

List<Patient> patients = new List<Patient>(); //change this with your actual list/IEnumerable 

IEnumerable<Patient> earliestAppointmentRecorded = patients.GroupBy(x => x.Name.ToLower().Trim()) 
    .Select(x => x.OrderBy(y => y.AppointmentDate).First()); 

die class Unter der Annahme, wie unten:

public class Patient { 
    public string Name { get; set; } 
    public string AppointmentType { get; set; } 
    public DateTime AppointmentDate { get; set; } 

}; 

Und, sagen wir, wollen Sie die früheren Aufzeichnungen mit denen der earliestAppointmentRecorded ersetzen, könnten Sie einfach tun:

patients = earliestAppointmentRecorded.ToList(); 
+0

Vielen Dank! es hat perfekt funktioniert –

+0

Sie sind willkommen .. :) – Ian

0

Versuchen folgende:

 static void Main(string[] args) 
     { 
      DataTable dt = new DataTable(); 
      dt.Columns.Add("name", typeof(string)); 
      dt.Columns.Add("appointment_type", typeof(string)); 
      dt.Columns.Add("appointment_date", typeof(DateTime)); 

      dt.Rows.Add(new object[] { "Ali", "dental", DateTime.Parse("8/5/2017 08:00:00")}); 
      dt.Rows.Add(new object[] { "Ali", "dental", DateTime.Parse("8/5/2017 16:00:00")}); 

      var groups = dt.AsEnumerable().GroupBy(x => new { name = x.Field<string>("name"), type = x.Field<string>("appointment_type") }).ToList(); 

      dt = groups.Select(x => x.OrderBy(y => y.Field<DateTime>("appointment_date")).LastOrDefault()).CopyToDataTable(); 

     } 
Verwandte Themen