IList (IList<T>) natychmiast tworzy trwałe dane w pamięci, co nie implementuje "odroczonego wykonywania", a jeśli załadowana jednostka ma powiązane entity, nie zostanie załadowana (ani natychmiast, ani leniwie).
IQeurable <T>nie tworzy od razu trwałych danych w pamięci, lecz ładuje je do pamięci tylko wtedy, gdy są one przejrzane (np. przez forreach), przekształcone w listę itp., i może osiągnąć "odroczone wykonanie", jeśli aktualnie załadowana jednostka ma powiązania, ta powiązana jednostka może zostać załadowana przez następny dostęp do danych.
Spójrz na następujący fragment kodu:
//IList的情况 Użytkownicy IList = res. ToList(); Użytkownicy zostali załadowani do pamięci, ale powiązana jednostka (UserInfos) dla każdego użytkownika nie została załadowana jest załadowana, więc kolejna linia kodu nie przechodzi płynnie VAR SS = użytkownicy. gdzie(p => p.UserInfos.ID != 3); Błąd jest zgłaszany, ponieważ jednostka UserInfos P nie może zostać załadowana
Sytuacja IQuerable IQueryable users = res. AsQueryable(); użytkownicy nie są ładowani od razu, a powiązaną jednostkę można uzyskać poprzez "leniwe ładowanie" Mam VAR SS = użytkownicy. gdzie(p => p.UserInfos.ID != 3); Tutaj uzyskano odpowiedni SS |