verwendetes Datenbanksystem: LINQ to Objects
Hi Leute,
ich hab mal eine generelle Frage zur vorgehensweise.
Ich möchte aus einer Collection einen User per LINQ selectieren, der eine bestimmte ID hat, dazu verwende ich folgenden Quellcode:
var User = (from u in VMCUsers
where u.ID == TheID
select u).First();
Das klappt auch wunderbar, so lange der User mit der ID vorhanden ist. Wenn die ID jedoch nicht gefunden wird, wirft der LINQ-Query eine Exception, welche ich zur Zeit abfange und unbehandelt belasse (leerer catch-block).
Ich suche jedoch nach einem besserem Weg dieses Problem zu lösen. Gibts da sowas wie eine if-exists abfrage auf die Collection, mit der ich vorher prüfen könnte ob der User drin ist ?
wie würdet ihr es machen ?
Hallo meisteralex
Es gibt .FirstOrDefault() / .SingleOrDefault().
Damit bekommst du das gewünschte oder den Standardwert.
So kannst du bspw. auf null prüfen, wenn du einen String / Objekt abfragst.
Wenn das Resultat null ist, wurde dein Eintrag nicht gefunden.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Es gibt .FirstOrDefault() / .SingleOrDefault().
Damit bekommst du das gewünschte oder den Standardwert.
Hallo Peter,
Muss dich ein wenig korrigieren:
FirstOrDefault gibt den ersten ersten Datensatz oder wenn kein Datensatz vorhanden ist ein leeres Objekt zurück. Wenn nun mehr als ein Datensatz vorhanden ist, verschweigt er dir das und gibt dir einfach den ersten zurück.
SingleOrDefault gibt wie FirstOrDefault den ersten Datensatz zurück, falls vorhanden. Wenn keiner vorhanden ist bekommst du einen Standardwert. Sollten jedoch mehr als ein Datensatz vorhanden so bekommst du eine InvalidOperationException.
SingleOrDefault ist also optimal wenn du wirklich wissen willst ob nur ein Datensatz existiert.
Grüße
Robert
BizTalk Open Space: http://biztalkopenspace.de/2010/
DNUG Chemnitz: http://dotnet-chemnitz.de
Blog: http://sqlpractice.wordpress.com
FirstOrDefault gibt den ersten ersten Datensatz oder wenn kein Datensatz vorhanden ist ein leeres Objekt zurück.
Nö, man bekommt einen Standardwert zurück, also unter Umständen auch "null".
Hallo Noodles,
Sorry, genau das meinte ich ja 😃 War bissel blöd formuliert.
Gruß
Robert
BizTalk Open Space: http://biztalkopenspace.de/2010/
DNUG Chemnitz: http://dotnet-chemnitz.de
Blog: http://sqlpractice.wordpress.com
Hallo Robert
Muss dich ein wenig korrigieren:
Nein, ergänzen 😃
Interessant, das mit der InvalidOperationException wusste ich noch nicht.
Standardmässig wird default(T) zurückgegeben, wenn kein Wert vorhanden ist, also bspw. 0, null, String.Empty, etc...
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011