Func<TObject, bool> to delegat
Wyrażenie<Funkc<TObject, bool>> to wyrażenia
Ekspresja stanie się delegatem po kompilacji, zanim będzie mogła zostać uruchomiona. Na przykład co
Expression<Func<int, bool>> ex = x=>x < 100;
Func<int, bool> func = ex. Compile();
Wtedy możesz wywołać funkc:
func(5) //-zwraca prawdziwość
func(200) //- zwraca false
Wyrażeń nie można wywoływać bezpośrednio.
Przypadek:Nieprawidłowy kod zapytania powoduje pełne zapytanie tabelowe bazy danych。
Kod błędu jest następujący:
Przekaż zmienną typu Func jako argument do metody Count,EF zapytuje wszystkie dane z całej tabeli i filtruje je z pamięci。 Wygenerowane wyrażenie SQL wygląda tak:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Wykonano polecenie DbCommand (8ms) [Parametry=[], CommandType='Text', CommandTimeout='30'] WYBIERZ [c]. [tamże], [c]. [client_type], [c]. [status], [c]. [lokator] Z [tabela] AS [c] Poprawny kod brzmi następująco:
Poprawne zapisywanie dodaje warunek where z bazy danych, a następnie zwraca wartość liczby bezpośrednio。 Wygenerowane wyrażenie SQL wygląda tak:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Wykonano DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] WYBIERZ COUNT(*) Z [tabela] AS [c] GDZIE [c]. [client_type] = 1
Używając wywołań delegatów Func, toSystem.Linq.EnumerableLicz poniżej
Wyrażenie wywołane przez Expression<Func<T, bool>> toSystem.Linq.QueryableLicz poniżej
(Koniec)
|