2013-04-11 5 views
6
ILookup<string, string> someList; 
      Cricket Sachin 
        Dravid 
        Dhoni 
      Football Beckham 
        Ronaldo 
        Maradona 
bool status = someList.Where(x => x.Key == "Football").Where(y => y.Value == "Ronaldo") 

powinien powrócić prawdaNajlepszy sposób, aby sprawdzić, czy istnieje wartość dla klucza w iLookup <string, string> używając LINQ

bool status = someList.Where(x => x.Key == "Football").Where(y => y.Value == "Venus williams") 

powinny return false

iLookup robi” t ma właściwość value, zamiast pętli, istnieje inteligentniejszy sposób na uzyskanie wyniku w kilku liniach. powyższy kod jest niedobry, mając nadzieję na coś podobnego, jeśli to możliwe. Jestem nowym Linq więc nauka lepszych sposobów

Odpowiedz

2
bool status = someList.Where(x => x.Key == "Football").Any(y => y.Value == "Venus williams") 
+0

superb! podoba mu się – user2271512

7

obiekt zwrócony z majątku ILookup<TKey, TElement>.Item (czyli to, co nazywa się, gdy robisz someList[...]) jest IEnumerable<TElement>. Możesz więc porównać każdy przedmiot bezpośrednio z wartością testową. W ten sposób:

var status = someList["Football"].Any(y => y == "Venus Williams"); 
+0

Zawodzi, jeśli nie ma żadnego klawisza '' Piłka nożna "' w obrębie odnośnika. Najpierw należy wywołać 'someList.Contains (" Football ")'. – MarcinJuraszek

+3

@MarcinJuraszek Jesteś tego pewien? Po prostu wypróbowałem to przy użyciu odnośnika utworzonego za pomocą 'ToLookup' i zwrócono pusty zestaw. Zwróć uwagę na specyfikacje ['IDictionary'] (http://msdn.microsoft.com/en-us/library/zyxt2e2h.aspx) określające wyjątek, ale [' ILookup'] (http://msdn.microsoft.com /en-us/library/bb549314.aspx) Dokumenty nie. –

+0

Hmm, czy jestem pewien? Niezupełnie, ale byłoby to miłe zachowanie logiczne. Dziękuję bardzo za wskazanie, że się myliłem! – MarcinJuraszek

0

Chciałbym użyć .Any(x => x.Value == "value").

może być źle, ale myślę, że chcesz to zrobić w 2 etapach, jakby sprawdzając, czy pierwszy (klucz) wyszukiwanie powiedzie przed przejściem do poszukiwania wartości w celu zapewnienia, jesteś nie robi .Any() na null object

1

Jak o:

var status = someList.Any(grp => grp.Key.Equals("Football") && grp.Contains("Venus Williams")); 

Wyjaśnienie: iLookup jest IEnumerable z IGrouping - zgrupowanie ma właściwość Key i jest lista ciąg ceni

Powiązane problemy