Func<TObject, bool> είναι αντιπρόσωπος
Έκφραση<Func<TObject, bool>> είναι εκφράσεις
Η έκφραση θα γίνει πληρεξούσιος μετά τη μεταγλώττιση πριν από την εκτέλεσή της. Όπως αυτό που
Έκφραση<Func<int, bool>> ex = x=>x < 100;
Func<int, bool> func = πρώην. Compile();
Στη συνέχεια, μπορείτε να καλέσετε το func:
func(5) //-επιστρέφει true
func(200) //- επιστρέφει false
Οι εκφράσεις δεν μπορούν να κληθούν απευθείας.
Υπόθεση:Ο εσφαλμένος κώδικας ερωτήματος προκαλεί ένα ερώτημα πλήρους πίνακα της βάσης δεδομένων。
Ο κωδικός σφάλματος έχει ως εξής:
Περάστε μια μεταβλητή τύπου Func ως όρισμα στη μέθοδο Count,Το EF υποβάλλει ερωτήματα σε όλα τα δεδομένα σε ολόκληρο τον πίνακα και τα φιλτράρει από τη μνήμη。 Η πρόταση SQL που δημιουργείται μοιάζει με αυτό:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Εκτελεσμένο DbCommand (8ms) [Παράμετροι=[], CommandType='Κείμενο', CommandTimeout='30'] ΕΠΙΛΟΓΗ [ c ]. [id], [c]. [client_type], [γ]. [κατάσταση], [c]. [ενοικιαστής] ΑΠΟ [πίνακας] AS [γ] Ο σωστός κωδικός είναι ο εξής:
Η σωστή γραφή προσθέτει μια συνθήκη where από τη βάση δεδομένων και στη συνέχεια επιστρέφει απευθείας την τιμή του count。 Η πρόταση SQL που δημιουργείται μοιάζει με αυτό:
info: Microsoft.EntityFrameworkCore.Database.Command[20101] Εκτελεσμένο DbCommand (4ms) [Παράμετροι=[], CommandType='Κείμενο', CommandTimeout='30'] ΕΠΙΛΈΞΤΕ COUNT(*) ΑΠΟ [πίνακας] AS [γ] ΟΠΟΥ [γ]. [client_type] = 1
Η χρήση κλήσεων πληρεξουσίων Func είναιSystem.Linq.EnumerableΜετρήστε παρακάτω
Η έκφραση που καλείται με Expression<Func<T, bool>> είναιSystem.Linq.QueryableΜετρήστε παρακάτω
(Τέλος)
|