2013-01-24 14 views
5

Próbuję utworzyć kolekcję par KeyValue z wyrażeniem lambda.KeyValuePair w wyrażeniu Lambda

Oto moja klasa i poniżej mój kod lambda. Nie udało mi się utworzyć KeyValuePair.

Chcę dostać zbiór KeyValuePair Id, IsReleased dla filmów komediowych. Umieściłem te KeyValuePair w HashSet dla szybkiego wyszukiwania.

public class Movie{ 
    public string Name{get;set;} 
    public int Id{get;set;} 
    public bool IsReleased{get;set;} 
    //etc 
} 

List<Movie> movieCollection=//getting from BL 

var movieIdReleased= new 
HashSet<KeyValuePair<int,bool>>(movieCollection.Where(mov=> mov.Type== "comedy") 
            .Select(new KeyValuePair<int,bool>(????)); 
+0

Rozważmy usin słownik klasę zamiast HashSet tutaj, myślę, że to jest bardziej odpowiednie tutaj. –

+0

A _HasSet_ z _KeyValuePair_, które zawierają identyfikator filmu ?! Czy możesz wyjaśnić, co chcesz zrobić? –

Odpowiedz

8

Należy zdać lambda do tej metody .Select, nie tylko wyrażenie:

.Select(movie => new KeyValuePair<int,bool>(movie.Id, movie.IsReleased)) 

nadzieję, że pomoże!

2
//.Select(new KeyValuePair<int,bool>(????)); 
.Select(movie => new KeyValuePair<int,bool>() 
       { Key = movie.Id, Value = movie.IsReleased}); 
+0

Tak. To działa. Dzięki. Zapomniałem dodać exp =>. –

1
var comedyMovies = movieCollection 
    .Where(mc => "comedy".Equals(mc.Type, StringComparison.OrdinalIgnoreCase)) 
    .Select(mc => new KeyValuePair<int, bool>(mc.Id, mc.IsReleased)); 
var distinctComedyMovies = new HashSet<KeyValuePair<int,bool>>(comedyMovies); 
Powiązane problemy