Ich muss zwei Listen vergleichen, die Objekte der gleichen Klasse enthalten, aber nicht jede Eigenschaft sollte verwendet werden, um auf Unterschiede zu prüfen. Z.B. Die Id-Eigenschaft (Primärschlüssel) sollte nicht verwendet werden.C# bekomme Unterschiede in zwei übereinstimmenden Listen
Mein Beispiel Klasse:
class MyClass
{
public System.Nullable<int> Id { get; set; }
public int VMId { get; set; }
public string Name { get; set; }
}
var oldR = new List<MyClass>();
oldR.Add(new MyClass() { Id = 1, VMId = 11, Name = "Test1" });
oldR.Add(new MyClass() { Id = 2, VMId = 22, Name = "Test2" });
oldR.Add(new MyClass() { Id = 3, VMId = 33, Name = "Test3" });
oldR.Add(new MyClass() { Id = 4, VMId = 44, Name = "Test4" });
oldR.Add(new MyClass() { Id = 5, VMId = 55, Name = "Test5" });
var newR = new List<MyClass>();
newR.Add(new MyClass() { Id = null, VMId = 22, Name = "Test2" });
newR.Add(new MyClass() { Id = null, VMId = 33, Name = "Test3" });
newR.Add(new MyClass() { Id = null, VMId = 44, Name = "Test43" });
newR.Add(new MyClass() { Id = null, VMId = 55, Name = "Test5" });
newR.Add(new MyClass() { Id = null, VMId = 66, Name = "Test6" });
Was ich mit dem oben tun möchte, ist, die beiden Listen auf der vmid Eigenschaft übereinstimmen. Als nächstes möchte ich prüfen, ob sich die Name-Eigenschaft von oldR zu newR geändert hat.
Grundsätzlich möchte ich jetzt, dass Test1 aus der Datenbank entfernt werden sollte, Test6 sollte hinzugefügt werden, und Test4 sollte auf Test43 aktualisiert werden.
Hoffe, es macht Sinn
EDIT: sollte ich erwähnen, dass meine wirkliche Klasse 20 Eigenschaften hat. Ich möchte jetzt wie man Linq verwenden, um zu vergleichen, ohne sie alle zu spezifizieren? Und vielleicht nur die Id-Eigenschaft ausschließen, die ich nicht vergleichen möchte
Wie kann ich das erreichen?
Versuchen Sie linq Abfragen. Das kann Ihnen helfen, die Objekte leicht zu vergleichen –
Ich sollte erwähnen, dass meine echte Klasse +20 Eigenschaften hat. Ich möchte jetzt wie man Linq verwenden, um zu vergleichen, ohne sie alle zu spezifizieren? Und vielleicht nur die Id-Eigenschaft ausschließen, die ich nicht vergleichen möchte – user1281991
Ich würde einen linken äußeren Join verwenden, um Listen VMID zu kombinieren. Siehe msdn: https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng