Linq to SQL: .FirstOrDefault() nicht zutreffend für select new { ... }
Ich nur gefragt,diese Frage. Die führen mich zu einer neuen Frage 🙂
Bis zu diesem Punkt, ich habe das folgende Muster auswählen Zeug mit Linq to SQL, die mit dem Zweck des seins in der Lage zu handhaben, 0 "rows" zurückgegeben von der Abfrage:
var person = (from p in [DataContextObject].Persons
where p.PersonsID == 1
select new p).FirstOrDefault();
if (person == null)
{
//handle 0 "rows" returned.
}
Aber ich kann nicht mit FirstOrDefault()
wenn ich das mache:
var person = from p in [DataContextObject].Persons
where p.PersonsID == 1
select new { p.PersonsID, p.PersonsAdress, p.PersonsZipcode };
//Under the hood, this pattern generates a query which selects specific
//columns which will be faster than selecting all columns as the above
//snippet of code does. This results in a performance-boost on large tables.
Wie kann ich prüfen, ob 0 "rows" zurückgegeben von der Abfrage, die mit dem zweiten Muster?
UPDATE:
Ich denke mein build schlägt fehl, weil ich bin versucht, weisen Sie das Ergebnis der Abfrage einer Variablen (this._user
) erklärt, mit der Art der [DataContext].User
.
this._user = (from u in [DataContextObject].Users
where u.UsersID == [Int32]
select new { u.UsersID }).FirstOrDefault();
Kompilierungs-Fehler: kann Nicht implizit konvertiert Art "AnonymousType#1" bis "[DataContext].Benutzer".
Irgendwelche Gedanken an, wie kann ich dies umgehen? Würde ich machen, damit mein Objekt?
InformationsquelleAutor cllpse | 2008-10-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bezüglich Ihrer UPDATE: Sie haben entweder erstellen Sie Ihre eigene Art, dieses zu ändern._durch werden int, oder wählen Sie das gesamte Objekt, nicht nur bestimmte Spalten.
InformationsquelleAutor liggett78
Warum kann Sie halten, tun das samething? Ist es ein geben Sie eine Fehlermeldung?
Ist es immer noch ein Referenz-Objekt, genau wie Sie eigentliche Objekt, es ist nur anonym, so dass Sie nicht wissen, die tatsächliche geben, bevor der code kompiliert wird.
Aktualisiert meine Frage.
InformationsquelleAutor Nick Berardi
Update:
Nennen .FirstOrDefault(null) wie folgt:
Dass der trick funktioniert für mich.
InformationsquelleAutor Andrew Backer
ODER
InformationsquelleAutor Mark Cidade
Können Sie immer noch
FirstOrDefault
. Nur habenPersonFields wird null oder ein Objekt mit Eigenschaften, die Sie erstellt haben.
InformationsquelleAutor Peter