Für meinen Fußballverein hacke ich gerade eine kleine Webseite zusammen mit der Mannschaften und Spieler (und noch einiges mehr, ist jetzt aber nicht so wichtig) verwaltet werden sollen. Auf der Übersichtseite werden alle Mannschaften mit dem Namen des Torwarts dargestellt. Das geht so:
var list = from m in linqContext.Mannschafts select new { m, Torwart = m.Spieler.FirstOrDefault(s => s.IstTorwart) };
Das geht auch, ist aber ziemlich langsam, weil für jede Mannschaft eine weitere Abfrage ausgeführt wird um den Torwart zu bestimmen. Wie kann ich diese Abfrage umschreiben, dass nur eine einzige Abfrage an die Datenbank geht?
Edit: Die Tabellen sehen so aus:
class Mannschaft { ... } class Spieler { int MannschaftID; bool IsTorwart; }
Das setzt aber eine denkbar ungünstige Tabellenstruktur voraus. Laut deiner Query müsste die Tabelle Mannschafts ein Feld 'IstTorwart' haben und weiters den Mannschaftsnamen sowie eine Feld für den Torwart. Eine 'klassische' normalisierte Tabellenstruktur löst das Problem von selbst.
m steht ja nicht für die Manschaften sondern für eine Manschaft. Mannschafts ist eine Collection, m ein Item. Ob eine Manschaft ein IstTorwart hat... Das ist eine andere Frage.
Mit den DataLoadOptions des DataContext kann eingestellt werden welche Daten auf einmal übertragen werden sollen. Für weitere Infos darüber verweise ich auf die MSDN: DataLoadOptions.