Za pomocą ?. operator z LINQ [duplikat]

Sep 27 2020

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

3 SalahAkbari Sep 27 2020 at 16:04

Sugerowałbym użycie .DefaultIfEmpty()metody przed wywołaniem minmetody:

MyList.Where(o => o.Propery1 == 1).DefaultIfEmpty().Min(o => o?.Price)

DefaultIfEmpty, Zwraca elementy dobrze IEnumerable<T>, albo domyślny cenione kolekcji singleton, jeżeli kolejność jest pusty.

1 martikyan Sep 27 2020 at 16:07

?.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