2012-05-10 14 views
8

Dies ist eine sehr einfache Frage, aber "All" ist so ein schlechtes Stichwort für Google lol.LINQ: Was gibt All() zurück, wenn kein Element vorhanden ist?

Ich möchte alle Kategorien erhalten, wo keine ihrer Produkte aktualisiert werden, oder keine Produkte haben.

Mit anderen Worten, erhalten Sie alle Kategorien, in denen alle ihre Produkte noch nicht aktualisiert sind, einschließlich aller Kategorien, die noch keine Produkte haben.

Ist das der richtige Ausdruck?

var categs = context.Categories.Where(c => c.Products.All(x => !x.Updated)); 
+2

Ja, sieht richtig aus. Protip: Sie könnten "linq all" gegooglet haben, es ist der erste Treffer: http://msdn.microsoft.com/en-us/library/bb548541.aspx – McGarnagle

Antwort

13

Es gibt true zurück. Vom documentation (Hervorhebung von mir):

Rückgabewert
true, wenn jedes Element der Quellsequenz den Test in der angegebenen Prädikat geht, oder wenn die Sequenz leer ist; sonst falsch.

(Dies ist die logische Schlussfolgerung zu. All der Elemente in der Sequenz in der Tat das Prädikat kann passieren, in der gleichen Art und Weise, dass alle meiner Töchter sind mehr als 10 Meter hoch. Die Tatsache, dass ich keine Töchter haben, ändert nicht die Wahrheit der Aussage :)

Siehe meine Edulinq blog post on Any and All für weitere Einzelheiten darüber, wie sie funktionieren.

+0

Logischerweise ist der Text, den Sie fett geschrieben haben, überflüssig. Wenn die Sequenz leer ist, erfüllt jedes Element der Sequenz den Test. Aber wie diese Frage zeigt, bekommt das nicht jeder. – hvd

+0

@hvd: Ja, tatsächlich. Ich wollte antworten und sagen, dass es aus dem logischen Grund wahr geworden ist, aber wie die Dokumentation es ausdrücklich sagt, dachte ich, ich würde damit gehen :) –

+0

Haha, eigentlich macht es Sinn! Ich habe gerade einen Gehirn-Jam für die Codierung den ganzen Tag. Danke Jon! – Aximili

4

Alle "Bestimmt, ob alle Elemente einer Sequenz eine Bedingung erfüllen."

MSDN

Ich denke, dass Ihr Ausdruck ist, alle Kategorien correct.You zu erhalten, die Produkte enthalten, die nicht aktualisiert werden.

Verwandte Themen