2014-01-20 11 views
6

Nur ein wenig verwirrt, wie dies zu erreichen ist.C# Kurzschrift LINQ .Where Anweisung

Ich habe Kategorien, die von der Website und vom Benutzer generiert wurden, und ich möchte Elemente zurückgeben, wo die zugeordnete Kategorie Benutzer generiert, wenn eine aktiv ist. Also ich habe das, was gut funktioniert, wenn eine Kategorie ausgewählt ist, aber wenn die Kategorie null ist, schlägt es offensichtlich fehl, da es kein Objekt gibt, um die Eigenschaft isActive zu erhalten.

Also brauche ich nur eine Überprüfung, wenn die erste oder Standard ist null, würde jede Hilfe sehr geschätzt werden.

Dank

Antwort

7

Vielleicht:

var item = User.Items 
    .Where(ui => ui.Categoires.Any(uic => !uic.isSystem && uic.isActive)); 

Dies gibt benutzer Elemente mit mindestens einer aktiven Nicht-System-Kategorie.

Eine Kategorie ist ein optionales Feld zum Produkt und eine Kategorie hat einen Zustand der isActive, so dass, wenn das Element hat eine zugeordnete Kategorie, die es muss tat, dann wird diese Kategorie aktiv sein muss.

Dann müssen Sie Artikel ohne Kategorie gehören (i annehmen, dass es kann nicht null sein):

var item = User.Items 
    .Where(ui => !ui.Categoires.Any() || ui.Categoires.Any(uic => !uic.isSystem && uic.isActive)); 
+0

Brilliant Antwort, aber nicht das, was im nach, ich will das Element, wenn es eine Kategorie haben tut, aber wenn es hat eine zugeordnete Kategorie, dann muss die zugehörige Kategorie aktiv sein, sorry, wenn meine Frage unklar war –

+0

Sorry, immer noch nicht klar: _ "Wenn es keine Kategorie hat, aber wenn es eine zugeordnete Kategorie hat, dann muss die zugehörige Kategorie aktiv sein "_ Ist das nicht ein Widerspruch? Wie kann es beides haben, keine Kategorie und auch eine aktive Kategorie? –

+0

Ja Eine Kategorie ist ein optionales Feld für ein Element und eine Kategorie hat den Status isActive. Wenn also das Element eine zugeordnete Kategorie hat, die es nicht muss, muss diese Kategorie aktiv sein. –