it-swarm.com.de

Die beste Methode zum Abrufen einzelner Datensätze in LINQ to SQL

Wenn ich eine Tabelle mit einer Bedingung im Schlüsselfeld abfrage, wie in:

        var user = from u in dc.Users
                   where u.UserName == usn
                   select u;

Ich weiß, dass ich entweder null oder ein Ergebnis bekomme. Sollte ich trotzdem fortfahren und die Ergebnisse mit einem for-each abrufen oder gibt es einen anderen bevorzugten Weg, um mit dieser Art von Situation umzugehen. 

42
Tony Peterson

Versuchen Sie etwas so:

var user = (from u in dc.Users
                   where u.UserName == usn
                   select u).FirstOrDefault();

Die FirstOrDefault - Methode gibt das erste Element einer Sequenz zurück, das eine angegebene Bedingung erfüllt, oder einen Standardwert, wenn kein solches Element gefunden wird.

76
Jorge Ferreira

Warum nicht sowas?

var user = dc.Users.SingleOrDefault(u=> u.UserName==usn);
18
Danimal

Es sollte auch beachtet werden, dass First/FirstOrDefault/Single/SingleOrDefault der Ausführungspunkt für einen LINQ to Sql-Befehl ist. Da die LINQ-Anweisung zuvor noch nicht ausgeführt wurde, kann sie die generierte SQL-Anweisung beeinflussen (z. B. kann sie dem Befehl sql eine TOP 1 hinzufügen).

5
James Curran

Ich würde First () oder FirstOrDefault () verwenden.

Der Unterschied: Bei First () wird eine Ausnahme ausgelöst, wenn keine Zeile gefunden werden kann.

4
Sam

Ich würde die SingleOrDefault-Methode verwenden.

var user = (from u in dc.Users
                   where u.UserName == usn
                   select u).SingleOrDefault();
1
Joel Cunningham

Eine andere Option ist, Contains (Benutzername) im Gegensatz zu "==" zu verwenden.

var user = (from u in dc.UserInfo 
                      where u.Users.Contains(username) 
                      select u).SingleOrDefault();
0