Za pomocą ?. operator z LINQ [duplikat]
Zgodnie z tą dokumentacją mogę skorzystać A?.B?.Do(C);.
Mam Listi chcę to przefiltrować, a następnie za pomocą Minmetody:
var Min = MyList.Where(o => o.Propery1 == 1)?.Min(o => o.Price)
Problem polega na tym, MyList.Where(o => o.Propery1 == 1)że nie zwraca żadnego wyniku i mam ten błąd:
Sekwencja nie zawiera żadnych elementów
Oraz StackTrace:
at System.Linq.Enumerable.Min (źródło IEnumerable1) at System.Linq.Enumerable.Min [TSource] (źródło IEnumerable1, selektor Func`2) ...
Więc jaki jest problem? Dlaczego nie mogę użyć Minmetody z pustą listą?
Odpowiedzi
Sugerowałbym użycie .DefaultIfEmpty()metody przed wywołaniem minmetody:
MyList.Where(o => o.Propery1 == 1).DefaultIfEmpty().Min(o => o?.Price)
DefaultIfEmpty, Zwraca elementy dobrzeIEnumerable<T>, albo domyślny cenione kolekcji singleton, jeżeli kolejność jest pusty.
?.Aka zerowy operator warunkowy działa, gdy wyrażenie po lewej stronie jest null. W tym przypadku nie masz null, ale pustą wyliczalną, więc .Max () nie ma pojęcia, co zrobić, gdy wejście jest puste.
Masz pusty pokój: zwróć wiek najstarszej osoby