C# : Most used operations in LINQ

Language-Integrated Query (LINQ) is a powerful feature in C# that enables developers to query and manipulate data using a syntax similar to SQL.
LINQ makes code more expressive, readable, and less error-prone. In this blog post, we'll explore some common LINQ operations using concise C# code snippets.
Filtering Data with Where
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = numbers.Where(n => n % 2 == 0);
Here, Where filters the elements of the collection based on a specified condition, returning only the even numbers.
Projecting Data with Select
List<string> names = new List<string> { "Alice", "Bob", "Charlie", "David" };
var nameLengths = names.Select(name => name.Length);
The Select operation projects each element of the collection into a new form. In this case, it returns the lengths of the names.
Sorting Data with OrderBy
List<string> fruits = new List<string> { "Apple", "Orange", "Banana", "Grapes" };
var sortedFruits = fruits.OrderBy(fruit => fruit);
Using OrderBy, you can sort elements of the collection in ascending order based on a specified key.
Aggregating Data with Aggregate
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var sum = numbers.Aggregate((acc, num) => acc + num);
Aggregate performs a cumulative computation on each element of the collection, here calculating the sum of all numbers.
Joining Data with Join
List<Student> students = GetStudents();
List<Course> courses = GetCourses();
var studentCoursePairs = students
.Join(courses,
student => student.CourseId,
course => course.Id,
(student, course) => new { student.Name, CourseName = course.Name });
The Join operation combines two collections based on a common key, creating pairs of related elements.
Grouping Data with GroupBy
List<Student> students = GetStudents();
var groupedByGrade = students.GroupBy(student => student.Grade);
GroupBy organizes elements of a collection into groups based on a specified key. Here, students are grouped by their grades.
Querying with First and FirstOrDefault
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var firstNumber = numbers.First(); // Throws an exception if the collection is empty
var firstOrDefaultNumber = numbers.FirstOrDefault(); // Returns the default value if the collection is empty
First returns the first element of a collection, and FirstOrDefault returns the default value if the collection is empty.
Chaining Operations
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var result = numbers
.Where(n => n % 2 == 0)
.OrderByDescending(n => n)
.Select(n => n * 2)
.ToList();
LINQ allows chaining multiple operations together, creating a pipeline of transformations.
Conclusion
In just a handful of examples, we've scratched the surface of LINQ's capabilities. Whether you're working with collections, databases, or other data sources, LINQ provides a versatile and expressive toolset. Mastering LINQ can greatly enhance your C# coding experience, making your code more concise and maintainable.
Happy querying!