2010-02-03 12 views
5

tengo un simple IEnumerable<foo> foos; Esta colección son algunos resultados de una llamada a DB.instrucción Linq para iterar a través de una colección y asegurarse de que cada elemento está en el orden correcto?

Deseo asegurarme de que cada elemento de la lista esté ordenado correctamente. El Db devuelve los resultados por

  • ordenados por id, del más bajo al más alto. p.ej. 1, 2, 3, 4 ,. ... etc.
  • ordenado por fecha de creación, decremento (más reciente, primero).

¿Se puede hacer esto con una declaración de linq rápido .. para comprobar esto?

por ejemplo. Assert.IsTrue(.. insert linq statement here ..)

Actualmente, tengo un bucle for y recuerdo la entrada anterior y compruebo si el valor de eso, si hubo un valor. Esto se siente ... engorroso.

¿Alguna idea?

Respuesta

4

Se podría comparar su colección a una versión ordenada:

CollectionAssert.AreEqual(foos.ToList(), foos.OrderBy(f => f.Id)); 

O:

CollectionAssert.AreEqual(foos.ToList(), 
          foos.OrderByDescending(f => f.DateCreated)); 
+0

@Andy White, wow - ¡eso es muy interesante! Nunca supe que había una clase CollectionAssert :) ¡es increíble! Dicho esto, cuando intenté hacer tu código, no tuve que hacer un ToList() para el primer parámetro ... pero para el segundo, tuve que agregar un .ToList() al final de esa función. ¿Puedes confirmar eso, por favor? –

+0

Oh, whoops, IEnumerable no tiene un método ToList(). Hay algunas técnicas diferentes para convertir un IEnumerable en una lista. Es posible que pueda aplicar una llamada de método de extensión no operativa para obtener un formato que se pueda convertir en una lista. –

2

Hay un método de extensión llamada SequenceEqual que hacer eso. Sin embargo, también hay un método afirmar llamado CollectionAssert.AreEqual que compara dos colecciones para garantizar que tienen los mismos elementos en el mismo orden.

Cuestiones relacionadas