Laden...

Vogehensweise beim selectieren mit LINQ

Erstellt von Christoph K. vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.044 Views
Christoph K. Themenstarter:in
821 Beiträge seit 2009
vor 15 Jahren
Vogehensweise beim selectieren mit LINQ

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 ?

5.941 Beiträge seit 2005
vor 15 Jahren

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

149 Beiträge seit 2006
vor 15 Jahren

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

N
4.644 Beiträge seit 2004
vor 15 Jahren

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".

149 Beiträge seit 2006
vor 15 Jahren

Hallo Noodles,

Sorry, genau das meinte ich ja 😃 War bissel blöd formuliert.

Gruß
Robert

5.941 Beiträge seit 2005
vor 15 Jahren

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