Jak mogę filtrować słownik za pomocą LINQ i zwracać go do słownika tego samego typu

87

Mam następujący słownik:

Dictionary<int,string> dic = new Dictionary<int,string>();
dic[1] = "A";
dic[2] = "B";

Chcę przefiltrować pozycje słownika i ponownie przypisać wynik do tej samej zmiennej:

dic = dic.Where (p => p.Key == 1);

Jak mogę zwrócić wynik jako słownik z tego samego typu [ <int,string>]?

Próbowałem ToDictionary, ale to nie działa.

Z góry dziękuję.

Homam
źródło
11
W przyszłości, jeśli wypróbowałeś oczywiste podejście, ale okazało się, że nie działa, prześlij kod, który wypróbowałeś.
Jon Skeet

Odpowiedzi:

193

ToDictionaryjest droga do zrobienia. To czyni pracę - jesteś po prostu używając go nieprawidłowo, prawdopodobnie. Spróbuj tego:

dic = dic.Where(p => p.Key == 1)
         .ToDictionary(p => p.Key, p => p.Value);

Powiedziawszy to, zakładam, że naprawdę chcesz innego Wherefiltra, ponieważ twój obecny zawsze znajdzie tylko jeden klucz ...

Jon Skeet
źródło