2009-11-06 13 views
5

Mam FormCollection i po prostu chcę tylko iterować za pomocą klawiszy, nie zawierają ceny ciąg.Wyrażenie Linq do filtrowania formcollection

Więc co próbowałem to było ...

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

Problemem jest powrót nie jest filtrowana lista jego powrocie wartości logicznych ... w którym w potrzebie filtrowana lista ciąg ...

AllKeys klasy zwraca ciąg [] więc w pewnym sensie jestem po prostu staramy się filtrować ciąg [tutaj] ...

Co mi brakuje tutaj ...

Dzięki dużo!

+0

Wygląda to dobrze dla mnie - nie wiem, dlaczego dostaniesz kilka wartości boolowskich. Czy próbowałeś sprawdzać var, aby zobaczyć, jaki to jest typ? – JustLoren

+0

@JustLoren, zmienna 'klucz' zadeklarowana w pętli' foreach' jest typu 'string', ponieważ metoda rozszerzenia' Where' zwraca 'IEnumerable ', więc masz rację wskazując, że nie można uzyskać wartości logicznych z tego kodu. –

+0

@ gmcalab, 'string.Contains (string)' metoda rozróżnia wielkość liter. Czy to może być problem? –

Odpowiedz

10

Oto odpowiedź ...

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

Czy jesteś pewien, że używasz Where i nie Select?

Używanie Where zwróci IEnumerable<string>, czego się spodziewasz.

Zastosowanie Select zwróci IEnumerable<bool>, co tak naprawdę się dzieje.

+0

Gdzie nie jest zwracana liczba mnoga Próbowałem tego ... string [] list = collection.Where (o =>! O.Contains ("Pricing")); I nie kompiluje się, mówiąc, że typem powrotu jest bool .... znalazłem odpowiedź i wysłałem ją. – Gabe

+1

@gmcalab: Jeśli 'collection' jest' FormCollection'/'NameValueCollection', wtedy twoja klauzula' Where' na pewno zwróci 'IEnumerable '. – LukeH

+0

+1 @Luke, gdzie rzeczywiście powróci IEnumerable foreach (string key w Request.Form.AllKeys.Where (k =>! K.Contains ("Cennik"))) {} IEnumerable kolekcja = Zapytanie .Form.AllKeys.Where (k =>! K.Contains ("Pricing")); Obie kompilują się idealnie. –

Powiązane problemy