Aktywne Wpisy
Jacinda +787
hej Mireczki, nie wiem czy jest ktoś tutaj co pamięta mój post sprzed sześciu lat, kiedy chwaliłam się wynikami z matury:
mój wpis z 2018
Przyszłam się pochwalić, że studia skończyłam, udało się bez żadnej obsuwy - jestem oficjalnie lekarzem (⌐ ͡■ ͜ʖ ͡■)
tera jeszcze trochę papierkowej roboty i
mój wpis z 2018
Przyszłam się pochwalić, że studia skończyłam, udało się bez żadnej obsuwy - jestem oficjalnie lekarzem (⌐ ͡■ ͜ʖ ͡■)
tera jeszcze trochę papierkowej roboty i
Nooleus +122
Chłop się pierwszy raz całował w życiu i z kim i z innym chłopem :33333
Wróciłem ostatnio do czytania o IQueryable i mam pewne wątpliwości. Z jednej strony spotkałem się z informacją, że jeśli nie użyjemy AsQueryable, filtrowanie odbywa się na bazie danych, a z drugiej strony, że bez AsQueryable, ale z ToListAsync(), filtrowanie również działa na bazie danych. Przykład można znaleźć na Stack Overflow. To kiedy w końcu stosować AsQueryable i zwracać IQueryable ? Pośrednie rozwiązanie zaproponował tutaj na blogu używając query jako parametru.
Według autora filtrowane na bazie
context.MyLongWideTable // A table with many records and columns
.Where(x => x.Type == "type")
.Select(x => new { x.Name, x.CreateDate })
Tu według autora tylko where jest wykonany na bazie
context.MyLongWideTable
.Where(x => x.Type == "type").AsEnumerable()
.Select(x => new { x.Name, x.CreateDate.Date })
natomiast na stronie MS jest tak
var groupedHighlyRatedBlogs = await context.Blogs
.AsQueryable()
.Where(b => b.Rating > 3) // server-evaluated
.AsAsyncEnumerable()
.GroupBy(b => b.Rating) // client-evaluated
.ToListAsync();
@
AsQueryable
. Dopóki nie pojawi się cast na jakiś typIEnumerable
to w teorii wszystkie zapytania typuWhere
czySelect
będą konwertowane na SQL - o ile będzie to możliwe. Jeżeli nie da się stworzyć takiego zapytania, to EF powinien rzucić wyjątekCzyli podsmarowując AsQurable używamy gdy chcemy query podzielić na wykonywanie na bazie i w aplikacji a
Tak
Tak,
Dodam tylko od siebie że gdyby where miałby materializować się po stronie aplikacji to byś musiał ładować cała tabele z bazy danych do pamięci, byłoby to kompletnie bez sensu. Najważniejszy use case IQueryable to dynamiczne budowanie zapytań i do momentu aż nie użyjesz wyżej wspomnianego select czy tolist zapytanie będzie typu IQueryable.
Co masz na myśli "zawsze". Zwracać z repository nie powinienem IQuerybale bo to antypattern.Natomiast z tego co doczytałem jak clientContext ma ustawione DbSety to one są zawsze IQuerybale .Czy chodziło Ci,żeby nie używać w query AsEnumerable()?
DbContext.Table
.Where()