2012-05-10 17 views
8

Esta es una pregunta muy simple, pero "Todos" es una palabra clave tan mala para google lol.LINQ: ¿Qué devuelve All() si no hay ningún elemento?

Quiero obtener todas las categorías, donde ninguno de sus productos se actualizan, o no tengo ningún producto.

En otras palabras, obtenga todas las categorías, donde todos sus productos aún no están actualizados, incluidas todas las categorías que aún no tienen ningún producto.

¿Es esta la expresión correcta?

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

Sí, parece correcto. Protip: podrías haber buscado en Google "linq all", es el primer hit: http://msdn.microsoft.com/en-us/library/bb548541.aspx – McGarnagle

Respuesta

13

Devuelve true. Desde el (énfasis mío) documentation:

Valor de retorno
cierto si cada elemento de la secuencia de origen pasa la prueba en el predicado especificado, o si la secuencia está vacía; de lo contrario, falso.

(Esta es la conclusión lógica también. Todo de los elementos en la secuencia en efecto, pasar el predicado, de la misma manera que todo de mis hijas tienen más de 10 pies de altura. El hecho de que yo no tiene hijas no cambia la verdad de la declaración :)

Vea mi Edulinq blog post on Any and All para más detalles sobre cómo funcionan.

+0

Lógicamente, el texto que en negritas es redundante. Si la secuencia está vacía, cada elemento de la secuencia satisface la prueba. Pero como muestra esta pregunta, no todos entienden eso. – hvd

+0

@hvd: Sí, de hecho. Iba a responder diciendo que se volvió verdadero por la razón * lógica *, pero como la documentación lo dice explícitamente, pensé que iría con eso :) –

+0

¡Jaja, en realidad tiene sentido! Solo estoy teniendo problemas para codificar todo el día. Gracias Jon! – Aximili

4

All "Determina si todos los elementos de una secuencia satisfacen una condición".

MSDN

creo que su expresión es correct.You conseguir todas las categorías que contienen productos que no se actualizan.

Cuestiones relacionadas