2009-11-06 17 views
5

Tengo un FormCollection y solo quiero iterar a través de las claves que no contengan el precio de cadena.Expresión de Linq para filtrar formcollection

Así que lo que intentaba era esto ...

foreach (var key in collection.AllKeys.Where(k => !k.Contains("Pricing"))){ ... } 

El problema es el retorno no es una lista filtrada de su devolución de valores booleanos ... en el que necesitan la lista filtrada de cuerda ...

AllKeys devuelve una cadena [] por lo que en cierto sentido, estoy tratando de filtrar una cadena [] aquí ...

Lo que estoy perdiendo aquí ...

Gracias tanto!

+0

Eso se ve bien para mí, no estoy seguro de por qué obtendría un montón de valores booleanos. ¿Has intentado inspeccionar var para ver qué tipo es? – JustLoren

+0

@JustLoren, la variable 'key' declarada en el bucle' foreach' es de tipo 'string' porque el método de extensión' Where' devuelve un 'IEnumerable ', por lo que está correctamente señalando que es imposible obtener valores booleanos de este código –

+0

@gmcalab, el método 'string.Contains (string)' distingue entre mayúsculas y minúsculas. ¿Podría ser este el problema? –

Respuesta

10

Aquí está la respuesta ...

foreach (var key in collection.AllKeys.Where(k => !k.Contains("Pricing")).ToArray<string>()){ ... } 
-1

¿Seguro que está utilizando Where y no Select?

El uso de Where arrojará un IEnumerable<string> que es lo que está esperando.

El uso de Select arrojará un IEnumerable<bool> que es lo que dices que realmente está sucediendo.

+0

Donde no devuelve el IEnumerable He intentado esto ... string [] list = collection.Where (o => o.Contains ("Precio")!); Y no compila diciendo que el tipo de devolución es un bool ... He averiguado esa respuesta y la he publicado. – Gabe

+1

@gmcalab: si 'collection' es un' FormCollection'/'NameValueCollection', entonces su cláusula' Where' definitivamente devolverá 'IEnumerable '. – LukeH

+0

1 @Luke, donde precisamente volverá IEnumerable foreach (clave de cadena en Request.Form.AllKeys.Where (k =>! K.Contains ("Precio"))) {} IEnumerable colección = Request .Form.AllKeys.Where (k =>! K.Contains ("Precios")); Ambos compilan perfectamente. –

Cuestiones relacionadas