Ciekawostka z Linq i kolekcją zwracaną przez `Where()`

0

Cześć,

mam takie małe pytanko ciekawostkę:

Czy da się czymś zastąpić ten "sufiks" ToList()[0] wiedząc, że Where() zawsze zwróci tylko jeden obiekt?
Coś np. tak jak tutaj:

this.SelectedType = this.Types.Where(type => type.Id == doc.TypeId).ToList()[0];
Gdzie:
this.SelectedType to obiekt jakiejkolwiek klasy, a właściwe referencja do i-tego obiektu z kolekcji poniżej.

Natomiast: 
this.Types to ObservableCollection<JakasKlasa>;

Wiem, że SelectedType wybrany spośród this.Types to będzie tylko jeden obiekt i potrzebuję go tutaj od razu zamiast kolekcji, która będzie miała i tak tylko jeden element w sobie.
Skoro subkolekcja zwrócona przez Where będzie zawierała zawsze tylko jeden element to może mogę jakoś od razu go uzyskać bez tej dziwnej konwersji na końcu?
Da się coś takiego w linq osiągnąć?

3

.FirstOrDefault() albo .First()?

Możesz wtedy predykat dać jako argument tych metod powyżej i obędzie się bez Where()

3

FirstOrDefault: https://msdn.microsoft.com/pl-pl/library/bb340482%28v=vs.110%29.aspx

SingleOrDefault: https://msdn.microsoft.com/pl-pl/library/bb342451%28v=vs.110%29.aspx

ew. First/Single.

Warto ogarnąć różnicę w ich działaniu (sposób reagowania na brak elementu w kolekcji / więcej niż jeden element w kolekcji).

0

@some_ONE O, świetnie działa:

this.SelectedType = this.Types.First(type => type.Id == doc.TypeId);

Tego potrzebowałem, dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1