Eine LINQ-Anweisung soll aus einer Methode eine Liste mit Objekten zuzrückgeben. Welchen Rückgabetyp muss meine Methode haben?? Eine Liste von Mitarbeitern List<Mitarbeiter> kann ich nicht zurückgeben, da ich ja in den LINQ - Anweisung einen anonymen Typ generiere! Objects oder List von Obkects möchte ich auch nicht zurückgeben!
public static ?????????? GetPolynome() { //Generiert eine Auflistung aller Mitarbeiter aus Abteilung Rechnungswesen. var x = from p in _db.Mitarbeiter where p.Abteilung="Rewe" select public static IEnumerable GetPolynome() new {p.PersonalNr , Bezeichnung= (p.Vorname+ " - " + p.Nachname) };
Ich könnt mir mehrere Optionen vorstellen. 1. Die einfachste wär doch die selektion und rückgabe der mitarbeiter selber; also anstatt einen anonymen typ zu generieren selektier doch einfach die mitarbeiter und gib diese als liste zurück. 2. Für die Rückgabe der im Moment codierten Info-Einheiten könntest du eine Klasse bauen und diese dann selektieren und als liste zurückgeben 3. Oder Du verwendest einfach Tupel um die Informationen zurückzugeben; das säh dann ungefähr so aus: select new Tuple<int, string>(p.PersonalNr, p.Vorname + p.Nachname); List<Tuple<int, string>> retValue = x.ToList();
Wenn du Tuple.Create statt des Konstruktors verwendest, kannst du die Typ-Inferenz für generische Typ-Parameter nutzen und brauchst nicht extra noch <int, string> angeben.
Von meinem Vorredner würde ich definitiv Variante 2 nehmen. Sollte das Ergebnis der Abfrage mal auf drei Spalten erhöht werden, musst du sonst den bestehenden Code refaktorieren. Mit einer eigenen Klasse bist du da auf der wesentlich sichereren Seite. Zudem ist ein Tuple nicht besonders gut geeignet um eine Liste davon an ein BindingSource zu hängen.
Ich verwende auch nur Version 2. Dies ist zwar beim Erstellen ein wenig arbeitsaufwendiger, doch wenn man hinterher ein Feld mehr braucht, geht's wesentlich schneller. Was ist schon eine Klasse mit 2 Properties....