Laden...

Abfrage, ob keine Werte vorhanden

Erstellt von Cannon vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.479 Views
C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 10 Jahren
Abfrage, ob keine Werte vorhanden

verwendetes Datenbanksystem: EF 5.0

Ich schaffe es nicht herauszufinden, ob Daten vorhanden sind oder nicht. Meine Abfrage sieht folegndermaßen aus:


_dbSet = context.Set<User>();
var set = _dbSet.Where(e => (e.BaseUser.UserId == user.BaseUser.UserId || e.UserId == user.BaseUser.UserId) && e.AccessLevel <= user.AccessLevel);

Allerdings kann es durchaus passieren, dass Where keine Werte zurückgibt. Aber wie kann ich das prüfen? Ich bekomme immer nur eine Exception "Die statische Methode erfordert ein Ziel".

if (set == null) funktioniert ja nicht. .. achja LazyLoading ist aktiviert.

849 Beiträge seit 2006
vor 10 Jahren

Prüf mal ob user.BaseUser null ist.

16.827 Beiträge seit 2008
vor 10 Jahren

1.) EF 5.0 und .NET kleiner 4.5? Downgraden auf EF 4.0.
2.) Prüfen, ob die Relationen null sind, wo sie theoretisch null sein können.
3.) Was ist AccessLevel? Ein Enum? Wenn ja siehe Punkt 1.

Ansonsten liefert Where immer eine Collection und niemals null.
Daher kann man problemlos mit Any() prüfen. Das sollte ja nicht so schwer sein.

C
Cannon Themenstarter:in
282 Beiträge seit 2008
vor 10 Jahren

Danke.. ich habe anscheinend den Wald vor lauter Bäumen nicht gesehen. BaseUser war null ...

@Abt:
Mir ist nicht ganz klar, was Du mir mitteilen möchtest.

  1. Ich nutzte EF 5.0 und Net 4.5. Wieso soll ich downgraden?
  2. Ist nur ein byte, kein Enum.

Prüft man lieber mit Any() oder mit Count() ?? Gibt es da Performance-Unterschiede?

16.827 Beiträge seit 2008
vor 10 Jahren

List<T> Any or Count?
Which method performs better: .Any() vs .Count() > 0?

Viele nutzen EF 5.0 und .NET 4.
EF5.0 erfordert aber für den kompletten Funktionsumfang 4.5, sodass im Hintergrund doch 4.4 verwendet wird / werden sollte (siehe Verweise). Manchmal gibts aber trotzdem Probleme mit gewissen Features (zB Encryption und Enums).