Obecnie używam jednego zapytania w dwóch miejscach, aby pobrać wiersz z bazy danych.
BlogPost post = (from p in dc.BlogPosts
where p.BlogPostID == ID
select p).Single();
Zapytanie działa poprawnie podczas pobierania wiersza w celu umieszczenia danych w polach tekstowych, ale zwraca błąd „Sekwencja nie zawiera żadnych elementów”, gdy jest używane do pobrania wiersza w celu edycji i umieszczenia z powrotem w bazie danych. Nie rozumiem, dlaczego może znaleźć odpowiedni wiersz w jednym przypadku, a w innym nie.
(Korzystanie z ASP.NET MVC i LINQ)
Odpowiedzi:
Umieść punkt przerwania w tym wierszu lub przed nim Debug.Print, w obu przypadkach i zobacz, jaki identyfikator zawiera.
źródło
Od „ Naprawianie błędu LINQ: sekwencja nie zawiera żadnych elementów ”:
Może to być również spowodowane następującymi poleceniami:
FirstAsync()
SingleAsync()
Last()
LastAsync()
Max()
Min()
Average()
Aggregate()
źródło
ctx.Rosters.First(c => c.RosterAccess == accCode);
<- zepsutyctx.Rosters.FirstOrDefault(c => c.RosterAccess == accCode);
<- PRACOWANYMax
ponad pustą sekwencjęLastOrDefault()
może to również wywołać ten błąd? Czemu ? Myślałem, że chodzi o "OrDefault"Proszę użyć
ponieważ jeśli w pierwszym wierszu wyniku nie ma informacji to instrukcja przechodzi do informacji domyślnych.
źródło
Cóż, co
ID
tu jest ? W szczególności czy jest to zmienna lokalna? Istnieją pewne problemy z zasięgiem / przechwytywaniem, co oznacza, że może być pożądane użycie drugiej kopii zmiennej, tylko dla zapytania:Również; jeśli to jest LINQ-to-SQL, to w aktualnej wersji uzyskujesz nieco lepsze zachowanie, jeśli używasz formularza:
źródło
To rozwiąże problem,
źródło
Oprócz wszystkiego innego, co zostało powiedziane, możesz zadzwonić,
DefaultIfEmpty()
zanim zadzwoniszSingle()
. Zapewni to, że sekwencja zawiera coś, a tym samym uniknie wyjątku InvalidOperationException „Sekwencja nie zawiera żadnych elementów”. Na przykład:źródło
Miałem podobną sytuację w przypadku funkcji obliczającej średnią.
Przykład:
Sprawa została rozwiązana:
źródło
Przyczyna błędu:
Zapytanie
from p in dc.BlogPosts where p.BlogPostID == ID select p
zwraca sekwencję.Single()
próbuje pobrać element z sekwencji zwróconej w kroku 1.Zgodnie z wyjątkiem - sekwencja zwrócona w kroku 1 nie zawiera żadnych elementów.
Single () próbuje pobrać element z sekwencji zwróconej w kroku 1, który nie zawiera żadnych elementów.
Ponieważ
Single()
nie jest w stanie pobrać pojedynczego elementu z sekwencji zwróconej w kroku 1, zgłasza błąd.Naprawić:
Upewnij się, że zapytanie
(from p in dc.BlogPosts where p.BlogPostID == ID select p)
zwraca sekwencję z co najmniej jednym elementem.
źródło