LINQ Core Operation:
- Filtering (Where): Chooses items from a sequence using a predicate—a condition.
var recs= records.Where(p => p.Age >= 25);
foreach (var rec in recs) {
Console.WriteLine(rec .Name);
}
- Projection (Select): Alters every sequence component into a new form.
var names = records.Select(p => p.Name);
foreach (var name in names){
Console.WriteLine(name);
}
- Sorts the components of a series in ascending or descending order using Ordering (OrderBy, OrderByDescending, ThenBy, ThenByDescending). Secondary sorting is done with ThenBy and ThenByDescending.
// Ordering (OrderBy, OrderByDescending, ThenBy, ThenByDescending)
var sortedByAge = records.OrderBy(p => p.Age).ThenByDescending(p => p.Name);
foreach (var person in sortedByAge){
Console.WriteLine($"{person.Name} ({person.Age})");
}// Grouping (GroupBy) and then order by
var recsbyCity= records.GroupBy(p => p.City);
foreach (var group in recsbyCity) {
foreach (var rec in group) {
Console.WriteLine($" - {rec .Name}");
}
}
- Grouping (GroupBy): Groups the components of a sequence according to a given key selector. Based on a related key, joining (Join, GroupJoin) merges components from two sequences. Join yields a flat outcome; GroupJoin yields a sequence of result groups.
// --- Joining (Join, GroupJoin) ---
var cities = new List<string>() { "Delhi", "Mumbai", "Bangalore" };
var recWithCityInfo = people.Join(
cities,
person => person.City,
city => city,
(person, city) => new { PersonName = person.Name, CityName = city };
foreach (var item in recWithCityInfo ) {
Console.WriteLine($"{item.PersonName} lives in {item.CityName}");
}
--- Group Joining (GroupJoin) ---
var cityGroups = cities.GroupJoin(
people,
city => city,
person => person.City,
(city, cityPeople) => new { City = city, People = cityPeople }
);
foreach (var group in cityGroups) {
Console.WriteLine($"City: {group.City}");
foreach (var person in group.People) {
Console.WriteLine($" - {person.Name}");
}
if (!group.People.Any()) {
Console.WriteLine(" - No residents");
}