Ich versuche, eine Hauptliste von Kunden mit einer anderen Liste von Kunden zusammenzuführen. Für jeden Kunden möchte ich Werte aus der Haupteingabeliste behalten, wenn der Wert bereits vorhanden ist (nicht Null), andernfalls ersetze er ihn durch den entsprechenden Wert aus der anderen Liste.Zwei Entitäten zusammenführen und Nullwerte in LINQ entfernen?
Etwas wie folgt aus:
public class Customer
{
public int ID { get; set; }
public string Card_ID { get; set; }
public decimal? Cash { get; set; }
}
var masterlist = new List<Customer>()
{
new Customer() { ID = 1, Cash = 25 },
new Customer() { ID = 2, Card_ID = "card2" }
};
var existinglist = new List<Customer>()
{
new Customer() { ID = 1, Card_ID = "card1" },
new Customer() { ID = 2, Card_ID = "card12222222222", Cash = 27 }
};
var mergedlist = (from a in masterlist
from b in existinglist
where a.ID == b.ID
select new
{
ID = a.ID,
Card_ID = (a.Card_ID == null ? b.Card_ID : a.Card_ID),
Cash = a.Cash.HasValue ? a.Cash : b.Cash
}).ToList();
Das erwartete Ergebnis in der vereinigten Liste so sein würde:
{ ID = 1, Card_ID = "card1", Cash = 25 }
{ ID = 2, Card_ID = "card2", Cash = 27 }
Jetzt ist mein Punkt ist, ich habe mehr als 50 Objekte in meiner Einheit. Gibt es einen einfacheren Weg, die Zusammenführung durchzuführen, als alle 50 Bedingungen in meiner select
Klausel manuell zu codieren?
Sie können zumindest verkürzen sie 'Card_ID = a.Card_Id ?? b.Card_Id'. – juharr