Γράψιμο ερωτημάτων σε C# LINQ

Grapsimo Erotematon Se C Linq



Παρόμοια με την SQL, είναι δυνατή η εγγραφή ερωτημάτων σε C# LINQ χρησιμοποιώντας τη σύνταξη ερωτήματος. Αυτά τα ερωτήματα χρησιμοποιούνται σε εφαρμογές βάσεων δεδομένων C# στον ιστό για τη λήψη των δεδομένων από τη βάση δεδομένων και την εμφάνιση στον Ιστό σε τρίτους χρήστες. Σε αυτόν τον οδηγό, θα συζητήσουμε ορισμένα ερωτήματα LINQ που είναι παρόμοια με το SQL. Για αυτό, θα δημιουργήσουμε μια πηγή δεδομένων λίστας και θα εφαρμόσουμε τα ερωτήματα σε αυτήν.

Σύνταξη ερωτήματος:

Ας δούμε τη γενική σύνταξη:

από επαναλήπτης σε Πηγή δεδομένων
επιλέγω επαναλήπτης ;

Εδώ:







  1. Το Data_Source μπορεί να είναι η λίστα που περιέχει τα δεδομένα.
  2. Ο επαναλήπτης χρησιμοποιείται για την ανάκτηση των στοιχείων από το Data_Source.

Πηγή δεδομένων

Σε ολόκληρο αυτόν τον οδηγό, θα χρησιμοποιήσουμε την ακόλουθη λίστα εγγραφών ως πηγή δεδομένων και όλα τα ερωτήματα εφαρμόζονται μόνο σε αυτήν την πηγή δεδομένων. Βεβαιωθείτε ότι εκτελείτε αυτόν τον κώδικα στο περιβάλλον σας και τροποποιείτε τις δηλώσεις ερωτήματος με τα ακόλουθα παραδείγματα ένα προς ένα, τα οποία θα συζητήσουμε:



χρησιμοποιώντας Σύστημα ;
χρησιμοποιώντας Σύστημα.Συλλογές.Γενικές ;
χρησιμοποιώντας System.Linq ;
χρησιμοποιώντας Σύστημα.Συλλογές ;

δημόσιο τάξη Υπολογισμοί
{
δημόσιο στατικός κενός Κύριος ( )
{
// Δημιουργία λίστας
Καταχωρίστε τις τιμές_χώρας = νέος Λίστα ( ) {

// Προσθήκη 5 εγγραφών στη λίστα
νέος Τιμές ( ) { είδος = 'Φρούτα' ,τοποθεσία = 'ΗΠΑ' , ποσότητα = 100 , κόστος = 345,78 } ,
νέος Τιμές ( ) { είδος = 'ΞΗΡΟΙ ΚΑΡΠΟΙ' ,τοποθεσία = 'Ινδία' , ποσότητα = 200 , κόστος = 3645,78 } ,
νέος Τιμές ( ) { είδος = 'Οι υπολοιποι' ,τοποθεσία = 'ΗΝΩΜΕΝΟ ΒΑΣΙΛΕΙΟ' , ποσότητα = 500 , κόστος = 90,68 } ,
νέος Τιμές ( ) { είδος = 'λάδι' ,τοποθεσία = 'ΗΠΑ' , ποσότητα = 100 , κόστος = 345,78 } ,
νέος Τιμές ( ) { είδος = 'τσίλια' ,τοποθεσία = 'ΗΠΑ' , ποσότητα = 10 , κόστος = 67,89 } ,
} ;


για κάθε ( ήταν Εγώ σε τιμές_χώρας )
{
Κονσόλα . WriteLine ( Εγώ . είδος + '' + Εγώ . τοποθεσία + '' + Εγώ . ποσότητα + '' + Εγώ . κόστος ) ;
}
}
}
δημόσιο τάξη Τιμές {
δημόσιο σειρά είδος { παίρνω ; σειρά ; }
δημόσιο σειρά τοποθεσία { παίρνω ; σειρά ; }
δημόσιο ενθ ποσότητα { παίρνω ; σειρά ; }
δημόσιο διπλό κόστος { παίρνω ; σειρά ; }
}

Εγγραφές:







Εξήγηση:

1. Δημιουργήστε τις τιμές με τα ακόλουθα χαρακτηριστικά:

2. Δημιουργήστε μια άλλη κλάση που είναι 'Υπολογισμοί' με κύρια μέθοδο και δημιουργήστε τη λίστα τιμών χώρας με πέντε εγγραφές.



Επιλέγω

Βασικά, το 'select' είναι ένας τελεστής προβολής που επιλέγει τα χαρακτηριστικά από την καθορισμένη πηγή δεδομένων. Το ερώτημα ξεκινά με 'από'. Στη συνέχεια, καθορίζουμε τον επαναλήπτη που επαναλαμβάνεται πάνω από την πηγή δεδομένων. Στη συνέχεια, καθορίζεται ο τελεστής 'επιλογή'.

Σύνταξη:

Όλα τα χαρακτηριστικά: από iterator στο Data_Source επιλέξτε iterator.

Ειδικό Χαρακτηριστικό: από iterator στο Data_Source επιλέξτε iterator.attribute.

Παράδειγμα 1:

Ας γράψουμε ένα ερώτημα για να επιλέξουμε όλες τις εγγραφές από τη λίστα.

χρησιμοποιώντας Σύστημα ;
χρησιμοποιώντας Σύστημα.Συλλογές.Γενικές ;
χρησιμοποιώντας System.Linq ;
χρησιμοποιώντας Σύστημα.Συλλογές ;

δημόσιο τάξη Υπολογισμοί
{
δημόσιο στατικός κενός Κύριος ( )
{
// Δημιουργία λίστας
Καταχωρίστε τις τιμές_χώρας = νέος Λίστα ( ) {

// Προσθήκη 5 εγγραφών στη λίστα
νέος Τιμές ( ) { είδος = 'Φρούτα' ,τοποθεσία = 'ΗΠΑ' , ποσότητα = 100 , κόστος = 345,78 } ,
νέος Τιμές ( ) { είδος = 'ΞΗΡΟΙ ΚΑΡΠΟΙ' ,τοποθεσία = 'Ινδία' , ποσότητα = 200 , κόστος = 3645,78 } ,
νέος Τιμές ( ) { είδος = 'Οι υπολοιποι' ,τοποθεσία = 'ΗΝΩΜΕΝΟ ΒΑΣΙΛΕΙΟ' , ποσότητα = 500 , κόστος = 90,68 } ,
νέος Τιμές ( ) { είδος = 'λάδι' ,τοποθεσία = 'ΗΠΑ' , ποσότητα = 100 , κόστος = 345,78 } ,
νέος Τιμές ( ) { είδος = 'τσίλια' ,τοποθεσία = 'ΗΠΑ' , ποσότητα = 10 , κόστος = 67,89 } ,
} ;

//επιλογή τελεστή στο ερώτημα
ήταν δεδομένα = από Εγώ σε τιμές_χώρας
επιλέγω Εγώ ;

για κάθε ( ήταν Εγώ σε δεδομένα )
{
Κονσόλα . WriteLine ( Εγώ . είδος + '' + Εγώ . τοποθεσία + '' + Εγώ . ποσότητα + '' + Εγώ . κόστος ) ;

}
}
}
δημόσιο τάξη Τιμές {
δημόσιο σειρά είδος { παίρνω ; σειρά ; }
δημόσιο σειρά τοποθεσία { παίρνω ; σειρά ; }
δημόσιο ενθ ποσότητα { παίρνω ; σειρά ; }
δημόσιο διπλό κόστος { παίρνω ; σειρά ; }
}

Παραγωγή:

Εδώ, δεν καθορίσαμε κανένα χαρακτηριστικό στο ερώτημα 'επιλογή'. Λάβαμε όλα τα χαρακτηριστικά από το ερώτημα (δεδομένα) μέσα στον βρόχο 'foreach' χρησιμοποιώντας τον επαναλήπτη.

Παράδειγμα 2:

Τώρα, λάβετε τα στοιχεία καθορίζοντας το χαρακτηριστικό στοιχείο στον τελεστή 'επιλογή'. Το ερώτημα είναι ' από το i σε country_prices επιλέξτε i.item '.

//επιλέξτε τελεστή για να λάβετε το χαρακτηριστικό στοιχείου στο ερώτημα
ήταν δεδομένα = από Εγώ σε τιμές_χώρας
επιλέγω Εγώ . είδος ;

για κάθε ( ήταν Εγώ σε δεδομένα )
{
Κονσόλα . WriteLine ( Εγώ ) ;

}

Παραγωγή:

Γραμμή # 21 – Γραμμή # 29:

2. Πού

Εάν θέλετε να φιλτράρετε τα δεδομένα βάσει ορισμένων συνθηκών/ών, μπορείτε να χρησιμοποιήσετε τον τελεστή «where» στο ερώτημα μαζί με τον όρο «επιλογή». Αλλά πρώτα χρησιμοποιείται ο τελεστής 'where' και μετά καθορίζεται ο τελεστής επιλογής.

Σύνταξη:

Ας δούμε πώς να χρησιμοποιήσετε τον τελεστή 'where' μέσα στο ερώτημα LINQ.

από επαναλήπτης σε Πηγή δεδομένων
που κατάσταση / μικρό
επιλέγω επαναλήπτης . Χαρακτηριστικό ;

Παράδειγμα 1: Ενιαία Κατάσταση

Ας φιλτράρουμε τις εγγραφές με βάση το χαρακτηριστικό στοιχείο. Χρησιμοποιήστε τον τελεστή ίσο με (==) στον τελεστή 'where' ως συνθήκη και συγκρίνετε τον επαναλήπτη με το 'Chillies'. Επιλέγονται λοιπόν οι εγγραφές που σχετίζονται με το “Chillies”.

Το ερώτημα είναι ' από i σε country_prices
όπου i.item == 'Τσίλι'
επιλέξτε το

//επιλέξτε με το πού θα φιλτράρετε τις εγγραφές
ήταν δεδομένα = από Εγώ σε τιμές_χώρας
που Εγώ . είδος == 'τσίλια'
επιλέγω Εγώ ;

για κάθε ( ήταν Εγώ σε δεδομένα )
{
Κονσόλα . WriteLine ( Εγώ . είδος + '' + Εγώ . τοποθεσία + '' + Εγώ . ποσότητα + '' + Εγώ . κόστος ) ;

}

Παραγωγή:

Υπάρχει μόνο ένας δίσκος με το στοιχείο 'Chillies'.

Γραμμή # 21 – Γραμμή # 30:

Παράδειγμα 2: Πολλαπλές συνθήκες

Ας φιλτράρουμε τις εγγραφές με βάση τα χαρακτηριστικά τοποθεσίας και ποσότητας. Η ποσότητα θα πρέπει να είναι μεγαλύτερη από 50 και μικρότερη από 300. Η τοποθεσία θα πρέπει να είναι 'ΗΠΑ'.

Το ερώτημα είναι ' από i σε country_prices
όπου i.ποσότητα > 50
όπου θ.ποσότητα < 300
όπου i.location == 'ΗΠΑ'
επιλέξτε το

//επιλέξτε με πού θα φιλτράρετε τις εγγραφές καθορίζοντας πολλαπλές συνθήκες
ήταν δεδομένα = από Εγώ σε τιμές_χώρας
που Εγώ . ποσότητα > πενήντα
που Εγώ . ποσότητα < 300
που Εγώ . τοποθεσία == 'ΗΠΑ'
επιλέγω Εγώ ;

για κάθε ( ήταν Εγώ σε δεδομένα )
{
Κονσόλα . WriteLine ( Εγώ . είδος + '' + Εγώ . τοποθεσία + '' + Εγώ . ποσότητα + '' + Εγώ . κόστος ) ;

}

Παραγωγή:

Υπάρχουν δύο εγγραφές που ταιριάζουν με τις προηγούμενες συνθήκες.

Γραμμή # 21 – Γραμμή # 32:

Παράδειγμα 3: Και (&&) Χειριστής

Μπορούμε να καθορίσουμε τον τελεστή 'and (&&)' για να καθορίσουμε πολλαπλές συνθήκες ταυτόχρονα. Εάν ισχύουν όλες οι προϋποθέσεις, οι εγγραφές που ικανοποιούν όλες τις προϋποθέσεις επιστρέφονται από το ερώτημα.

Σε αυτό το παράδειγμα, επιλέγουμε τις εγγραφές εάν η ποσότητα είναι μεγαλύτερη από 20 και το κόστος είναι 67,89.

Το ερώτημα είναι ' από i σε country_prices
όπου θ.ποσότητα < 20 && θ.κόστος == 67,89
επιλέξτε το

ήταν δεδομένα = από Εγώ σε τιμές_χώρας
που Εγώ . ποσότητα < είκοσι && Εγώ . κόστος == 67,89
επιλέγω Εγώ ;

για κάθε ( ήταν Εγώ σε δεδομένα )
{
Κονσόλα . WriteLine ( Εγώ . είδος + '' + Εγώ . τοποθεσία + '' + Εγώ . ποσότητα + '' + Εγώ . κόστος ) ;

}

Παραγωγή:

Υπάρχει μόνο ένας δίσκος με την ποσότητα που είναι μικρότερη από 20 και κόστος 67,89

Γραμμή # 21 – Γραμμή # 29:

Παράδειγμα 4: Ή (||) Χειριστής

Ο τελεστής 'ή (||)' χρησιμοποιείται επίσης για τον καθορισμό πολλαπλών συνθηκών ταυτόχρονα. Εάν τουλάχιστον μία συνθήκη είναι αληθής, επιστρέφονται οι εγγραφές που ικανοποιούν αυτήν την προϋπόθεση.

Σε αυτό το παράδειγμα, επιλέγουμε τις εγγραφές εάν η ποσότητα είναι μεγαλύτερη από 300 ή η τοποθεσία είναι 'Τόκιο'.

Το ερώτημα είναι ' από i σε country_prices
όπου θ.ποσότητα > 300 || i.location == 'Τόκιο'
επιλέξτε το

ήταν δεδομένα = από Εγώ σε τιμές_χώρας
που Εγώ . ποσότητα > 300 || Εγώ . τοποθεσία == 'Τόκιο'
επιλέγω Εγώ ;

για κάθε ( ήταν Εγώ σε δεδομένα )
{
Κονσόλα . WriteLine ( Εγώ . είδος + '' + Εγώ . τοποθεσία + '' + Εγώ . ποσότητα + '' + Εγώ . κόστος ) ;

}

Παραγωγή:

Υπάρχει μόνο μία εγγραφή με ποσότητα μεγαλύτερη από 300 (η πρώτη συνθήκη ταιριάζει).

Γραμμή # 21 – Γραμμή # 29:

3. Παραγγελία από

Εάν θέλετε να τακτοποιήσετε τις εγγραφές που επιστρέφονται από το ερώτημα LINQ σε αύξουσα ή φθίνουσα σειρά με βάση τις τιμές σε οποιοδήποτε από τα χαρακτηριστικά, μπορείτε να χρησιμοποιήσετε τον τελεστή 'order by' στο ερώτημα. Πρέπει να καθορίσετε αυτόν τον τελεστή πριν από τον τελεστή 'επιλογή'.

Σύνταξη:

Ας δούμε πώς να χρησιμοποιήσετε τον τελεστή 'παραγγελία κατά' μέσα στο ερώτημα LINQ.

Αύξουσα σειρά:

από επαναλήπτης σε Πηγή δεδομένων
Σειρά με επαναλήπτης . Χαρακτηριστικό ανερχόμενος
επιλέγω επαναλήπτης ;

Φθίνουσα σειρά:

από επαναλήπτης σε Πηγή δεδομένων
Σειρά με επαναλήπτης . Χαρακτηριστικό φθίνων
επιλέγω επαναλήπτης ;

Παράδειγμα 1: Αύξουσα σειρά

Επιλέξτε όλα τα χαρακτηριστικά από την πηγή δεδομένων (λίστα) και επιστρέψτε τα με αύξουσα σειρά με βάση τις τιμές στο χαρακτηριστικό quantity.

Το ερώτημα είναι ' από i σε country_prices
παραγγελία κατά θ. ποσότητα αύξουσα
επιλέξτε το

ήταν δεδομένα = από Εγώ σε τιμές_χώρας
παραγγελία από i . ποσότητα ανερχόμενος
επιλέγω Εγώ ;

για κάθε ( ήταν Εγώ σε δεδομένα )
{
Κονσόλα . WriteLine ( Εγώ . είδος + '' + Εγώ . τοποθεσία + '' + Εγώ . ποσότητα + '' + Εγώ . κόστος ) ;

}

Παραγωγή:

Γραμμή # 21 – Γραμμή # 29:

Παράδειγμα 2: Φθίνουσα σειρά

Επιλέξτε όλα τα χαρακτηριστικά από την πηγή δεδομένων (λίστα) και επιστρέψτε τα με φθίνουσα σειρά με βάση τις τιμές του χαρακτηριστικού κόστους.

Το ερώτημα είναι ' από i σε country_prices
Παραγγελία με φθίνουσα τιμή
επιλέξτε το

ήταν δεδομένα = από Εγώ σε τιμές_χώρας
παραγγελία από i . κόστος φθίνων
επιλέγω Εγώ ;

για κάθε ( ήταν Εγώ σε δεδομένα )
{
Κονσόλα . WriteLine ( Εγώ . είδος + '' + Εγώ . τοποθεσία + '' + Εγώ . ποσότητα + '' + Εγώ . κόστος ) ;

}

Παραγωγή:

Γραμμή # 21 – Γραμμή # 29:

4. Όριο

Το Limit in SQL περιορίζει τις εγγραφές που επιστρέφονται από το ερώτημα. Επιστρέφει τις κορυφαίες εγγραφές που επιστρέφονται από το ερώτημα. Στο LINQ, μπορούμε να το πετύχουμε αυτό χρησιμοποιώντας το Skip() με τον τελεστή Take(). Η Take() παίρνει τον καθορισμένο αριθμό εγγραφών. Το Skip() χρησιμοποιείται για τον καθορισμό του αριθμού εγγραφής έναρξης. Με αυτόν τον τρόπο, μπορούμε να επιτύχουμε τη λειτουργικότητα «όριο» στο LINQ.

Σύνταξη:

( από επαναλήπτης σε Πηγή δεδομένων
επιλέγω επαναλήπτης ) . Παραλείπω ( n ) . Παίρνω ( n ) ;
  1. Το Skip() χρησιμοποιείται για την παράλειψη των εγγραφών και την επιστροφή των υπόλοιπων εγγραφών. Χρειάζεται ένας ακέραιος αριθμός που καθορίζει τον αριθμό των στοιχείων που πρέπει να παραβλεφθούν. Στην περίπτωσή μας είναι 0.
  2. Η Take() χρησιμοποιείται για τη λήψη 'n' αριθμού εγγραφών από την πρώτη εγγραφή.

Παράδειγμα:

Επιλέξτε τις τρεις πρώτες εγγραφές από τις πέντε εγγραφές που επιστρέφονται από το ερώτημα.

Το ερώτημα είναι ' (από το i σε country_prices
επιλέξτε i).Skip(0).Take(3)'

ήταν δεδομένα = ( από Εγώ σε τιμές_χώρας
επιλέγω Εγώ ) . Παραλείπω ( 0 ) . Παίρνω ( 3 ) ;

για κάθε ( ήταν Εγώ σε δεδομένα )
{
Κονσόλα . WriteLine ( Εγώ . είδος + '' + Εγώ . τοποθεσία + '' + Εγώ . ποσότητα + '' + Εγώ . κόστος ) ;

}

}

Παραγωγή:

Γραμμή # 21 – Γραμμή # 28:

συμπέρασμα

Μάθαμε πώς να γράφουμε τα ερωτήματα σε C# LINQ που  είναι παρόμοια με την SQL. Ως μέρος αυτού του σεμιναρίου, συζητήσαμε πώς να χρησιμοποιήσετε τον τελεστή 'επιλογή' για να επιλέξετε τις εγγραφές από την πηγή δεδομένων. Για να φιλτράρουμε τις εγγραφές που επιστρέφονται από το ερώτημα, χρησιμοποιήσαμε τον τελεστή 'where' καθορίζοντας τις συνθήκες. Στη συνέχεια, μάθαμε πώς να ταξινομούμε τις εγγραφές που επιστρέφονται από το ερώτημα με τον τελεστή 'παραγγελία κατά'. Τέλος, για να περιορίσουμε τις εγγραφές, χρησιμοποιήσαμε τους τελεστές Skip() και Take().