class Schuldner { int ID; string Name; /* lauter weitere Felder */ } class Gläubiger { int ID; string Name; /* lauter weitere Felder */ }
Jetzt sollen alle Schuldner und alle Gläubiger in der Datenbank sortiert nach dem Namen in einer ListView-Tabelle ausgegeben werden. Ich könnte ja zwei separate LINQ-Abfragen machen und hätte dann zwei Listen, aber ich will die ja zusammen in einer Liste sortiert haben (obwohl die Objekte einen unterschiedlichen Typ haben). Ich will auch eigentlich nicht zwei LINQ-Abfragen machen, weil mir das zu viel Performance kostet. Wie kann ich das performant machen?
Wie schaut die Datenbank dazu aus? Sind Schuldner und Gläubiger in einer Tabelle oder liegen diese in separaten Tabellen? Was ist eine ListView-Tabelle? ListView oder DataGridView - was meinst du?
Du kannst eine Abfrage erstellen indem du eine zusätzliche Klasse definierst:
class Person { public int ID { get; set; } public string Name { get; set; } /* weitere gemeinsame Eigenschaften */ }
Die Abfrage schaut dann so aus und verwendet die Union-Erweiterungsmethode:
List<Person> personList = null; using (DataClasses1DataContext dc = new DataClasses1DataContext()) { var schuldner = from s in dc.Schuldner select new Person { ID = s.ID, Name = s.Name };
var gläubiger = from g in dc.Gläubiger select new Person { ID = g.ID, Name = g.Name };
personList = schuldner.Union(gläubiger).ToList(); /* personList kann weiter verwendet werden */ }
Die Daten in personList können dann für das ListView verwendet werden.
Union entspricht im SQL "UNION" während Concat "UNION ALL" entspricht. D.h. mit Concat werden auch Duplikate zurückgegeben. Dies ist zu berücksichtigen.
Was ist eine ListView-Tabelle? ListView oder DataGridView - was meinst du?