Aktywne Wpisy
cffelson +153
Poszedłem na balkon na szluga i zajumałem w kieszeni uszka które teraz odgrzewam na kaloryferze XD #gotujzwykopem
źródło: image_picker_CDEC798F-1033-4719-B8DF-648E847555D2-70732-000011FDE6728BE1
Pobierz
tanczmy +19
Poznałem dzisiaj (znajomy znajomych) prawdziwego rasistę i antysemitę - gość w młodym wieku, który swój światopogląd kreuje głównie za pomocą rolek na TikToku. Trudno mi było je jakoś określić jednym słowem ale nazwałbym je może „mocno stargetowanymi” pod bardzo konkretny, nienawistny przekaz, skierowany głównie na to żeby zdyskryminować drugiego człowieka albo ze względu na pochodzenie, albo religię, albo kolor skóry. Rzadko kiedy ktoś swoimi poglądami czy jakimiś niemądrymi wypowiedziami jest w stanie




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ś typIEnumerableto w teorii wszystkie zapytania typuWhereczySelectbę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()