Mam pytanie dotyczące zapytania LINQ. Zwykle zapytanie zwraca IEnumerable<T>
typ. Jeśli zwrot jest pusty, nie wiem, czy jest on zerowy, czy nie. Nie jestem pewien, czy poniższe ToList()
zgłoszenie wyrzuci wyjątek, czy po prostu pusty, List<string>
jeśli wynik nie zostanie znaleziony IEnumerable
?
List<string> list = {"a"};
// is the result null or something else?
IEnumerable<string> ilist = from x in list where x == "ABC" select x;
// Or directly to a list, exception thrown?
List<string> list1 = (from x in list where x == "ABC" select x).ToList();
Wiem, że to bardzo proste pytanie, ale na razie nie mam VS.
Odpowiedzi:
Zwróci pusty wyliczalny. To nie będzie zero. Możesz spać dźwięk :)
źródło
Możesz także sprawdzić
.Any()
metodę:Tylko uwaga,
.Any
która nadal pobierze rekordy z bazy danych; wykonanie.FirstOrDefault()/.Where()
będzie tak samo narzutem, ale będziesz w stanie złapać obiekty zwrócone z zapytaniaźródło
.Any()
po prostu powie ci, czy masz w ogóle jakieś pasujące rekordy, gdzie wykonanie rzeczywistego zapytania w celu znalezienia określonej wartości może być zerowe, gdy.Any()
nie jest.(Zrzut pochodzi z LinqPad )
źródło
Count()
to także metoda, a nie tylko właściwość.ToList zwraca pustą listę. (to samo co nowa List ());
źródło
W Linq-to-SQL, jeśli spróbujesz uzyskać pierwszy element zapytania bez rezultatów, pojawi się
sequence contains no elements
błąd. Zapewniam cię, że wspomniany błąd nie jest równyobject reference not set to an instance of an object
. podsumowując nie, nie zwróci wartości null, ponieważ null nie może powiedzieć,sequence contains no elements
że zawsze będzie mówićobject reference not set to an instance of an object
;)źródło
Inne posty tutaj wyjaśniły, że wynikiem jest „pusty” IQueryable, który ToList () poprawnie zmieni na pustą listę itp.
Bądź ostrożny z niektórymi operatorami, ponieważ będą rzucać, jeśli wyślesz im pustą listę. Może się to zdarzyć, gdy połączysz je razem.
źródło
Nie wyrzuci wyjątku, otrzymasz pustą listę.
źródło