LINQ (Language Integrated Query) παρέχει έναν ενοποιημένο, εκφραστικό τρόπο να κάνετε ερωτήματα και να μετασχηματίσετε δεδομένα — συλλογές, βάσεις δεδομένων, XML — χρησιμοποιώντας συνεπή σύνταξη. Φέρνει λειτουργίες συναρτησιακού στυλ (φίλτρο, χάρτη, ομάδα, συγκέντρωση) απευθείας στη C#, καθιστώντας τον χειρισμό δεδομένων συνοπτικό και ευαναγνώριστο.
Method syntax (η κοινή μορφή)
var adults = people
.Where(p => p.Age >= 18) // filter
.OrderBy(p => p.Name) // sort
.Select(p => p.Name.ToUpper()) // transform (map)
.ToList(); // materialize
// aggregations and more
int total = numbers.Sum();
var count = people.Count(p => p.IsActive);
var first = people.FirstOrDefault(p => p.Id == 5); // null if none
bool any = people.Any(p => p.Age > 65);
var groups = people.GroupBy(p => p.City); // group by a key
var max = people.Max(p => p.Age);
Οι μέθοδοι LINQ (extension methods σε IEnumerable<T>) συνδέονται μαζί για να δημιουργήσουν εκφραστικές δεδομένων pipelines — φιλτράρισμα (Where), μετασχηματισμό (Select), ταξινόμηση, ομαδοποίηση και συγκέντρωση — πολύ πιο καθαρό από χειροκίνητους βρόχους. Τα lambdas (p => ...) είναι delegates.
Query syntax (εναλλακτική SQL-like)
var adults =
from p in people
where p.Age >= 18
orderby p.Name
select p.Name;
// equivalent to the method syntax — a more SQL-like style for complex queries
Το LINQ είναι deferred (lazy)
var query = people.Where(p => p.IsActive); // NOT executed yet (deferred)
foreach (var p in query) { } // executes NOW (on enumeration)
var list = query.ToList(); // or force execution with ToList/ToArray/Count
Οι περισσότεροι τελεστές LINQ είναι deferred — δημιουργούν ένα ερώτημα που εκτελείται μόνο όταν το απαριθμήσετε (ή καλέσετε ToList()/Count()), επιτρέποντας αποδοτική σύνθεση.
LINQ σε βάσεις δεδομένων (Entity Framework)
// the SAME LINQ syntax queries a DATABASE — translated to SQL by Entity Framework
var users = await db.Users.Where(u => u.Active).OrderBy(u => u.Name).ToListAsync();
// → translated to: SELECT * FROM Users WHERE Active = 1 ORDER BY Name
Με το Entity Framework, τα ίδια ερωτήματα LINQ λειτουργούν σε μια βάση δεδομένων (μεταφρασμένα σε SQL) — μια ισχυρή ενοποίηση.
Γιατί έχει σημασία
Το LINQ είναι ένα από τα πιο ισχυρά και διακριτικά χαρακτηριστικά της C# — μετέσχηματίσε τον τρόπο που η C# χειρίζεται τα δεδομένα παρέχοντας έναν ενοποιημένο, εκφραστικό, συναρτησιακό τρόπο να κάνετε ερωτήματα και να μετασχηματίσετε συλλογές, βάσεις δεδομένων και άλλες πηγές, επομένως η κατανόησή του είναι απαραίτητη για παραγωγική ανάπτυξη C#.
Η βασική αξία είναι η αντικατάσταση των λεκτικών, imperative βρόχων με συνοπτικά, ευαναγνώριστα, composable ερώτημα pipelines (Where/Select/OrderBy/GroupBy/aggregations) για φιλτράρισμα, μετασχηματισμό, ομαδοποίηση και συγκέντρωση δεδομένων — λειτουργίες που εμφανίζονται συνεχώς στον πραγματικό κώδικα.
Η ενοποίηση του LINQ είναι ιδιαίτερα σημαντική: η ίδια σύνταξη κάνει ερωτήματα σε συλλογές στη μνήμη και βάσεις δεδομένων (μέσω Entity Framework, μεταφρασμένες σε SQL) και άλλες πηγές, επομένως η μάθηση LINQ αποδίδει σε πολλά σενάρια.
Η κατανόηση του method syntax (η κοινή μορφή, χρησιμοποιώντας lambdas/delegates), του query syntax (η SQL-like εναλλακτική), των κοινών τελεστών και ειδικά της deferred execution (τα ερωτήματα LINQ είναι lazy, εκτελούνται μόνο στην απαρίθμηση — σημαντικό για την αποδοτικότητα και την αποφυγή εκπλήξεων) είναι σημαντική γνώση για τη σύνταξη καθαρού, αποδοτικού κώδικα χειρισμού δεδομένων.
Επειδή η ανάκτηση και ο μετασχηματισμός δεδομένων είναι παντού, και επειδή το LINQ είναι ο idiomatικός, ισχυρός τρόπος που η C# τα χειρίζεται (σε συλλογές και βάσεις δεδομένων), η κυριαρχία του LINQ είναι βασική, συχνά εφαρμοζόμενη γνώση που είναι χαρακτηριστικό της παραγωγικής ανάπτυξης C# και ένα καθοριστικό χαρακτηριστικό της γλώσσας — καθιστώντας το ένα κοινό, σημαντικό θέμα συνέντευξης.
