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

Ciekawostka z Linq i kolekcją zwracaną przez `Where()`
grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
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:

Kopiuj
this.SelectedType = this.Types.Where(type => type.Id == doc.TypeId).ToList()[0];
Kopiuj
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ąć?

SO
  • Rejestracja: dni
  • Ostatnio: dni
3

.FirstOrDefault() albo .First()?

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

  • Rejestracja: dni
  • Ostatnio: dni
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).

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
0

@some_ONE O, świetnie działa:

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

Tego potrzebowałem, dzięki :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.