C# erbjuder LINQ (Language Integrated Query) som ett integrerat verktyg för att utföra datafrågor direkt i språket. Tillsammans med lambda-uttryck kan du använda LINQ för att skriva kort och kraftfull kod som bearbetar samlingar (som listor, arrayer, etc.) på ett deklarativt sätt.
LINQ (Language Integrated Query) är ett frågespråk som är inbyggt i C#. Det ger dig möjlighet att skriva frågor för att hämta, filtrera, sortera och manipulera data direkt i språket, utan att behöva gå igenom tredjepartslösningar. LINQ används ofta för att fråga och manipulera data från källor som arrayer, listor, XML-filer, databaser och till och med fjärrtjänster.
Innan LINQ var det ofta nödvändigt att skriva långa och repetitiva loopar för att bearbeta data. LINQ introducerar ett mer deklarativt tillvägagångssätt, där du beskriver vad du vill göra med data, snarare än hur du gör det.
Exempel på loop-baserad kod utan LINQ:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
List<int> evenNumbers = new List<int>();
foreach (int number in numbers) {
if (number % 2 == 0) {
evenNumbers.Add(number);
}
}
Samma kod med LINQ:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
LINQ gör det möjligt att skriva mindre och mer lättläst kod. I detta exempel använder vi metoden Where för att filtrera ut jämna tal.
Lambda-uttryck är en kompakt och flexibel metod för att definiera anonyma funktioner (dvs. funktioner utan namn). Lambda-uttryck är mycket vanliga i LINQ och används ofta som parametrar till LINQ-metoder.
Ett lambda-uttryck består av en inparameterlista, ett =>-tecken (lambda-operatorn) och ett uttryck eller ett kodblock:
(parameterlista) => uttryck
Exempel:
int[] numbers = { 1, 2, 3, 4, 5 };
var squaredNumbers = numbers.Select(n => n * n).ToArray();
Här är n => n * n ett lambda-uttryck som tar en parameter n och returnerar kvadraten av den.
n i ovanstående exempel).n * n).LINQ använder sig av flera metoder som är mycket användbara när du arbetar med samlingar och andra datakällor. Här är några av de vanligaste:
Where filtrerar data baserat på ett villkor.
Exempel:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
I detta exempel filtreras alla jämna tal från numbers.
Select används för att projicera data till en ny form. Detta är användbart för att omvandla varje element i en samling.
Exempel:
string[] names = { "John", "Jane", "Jake" };
var nameLengths = names.Select(name => name.Length).ToList();
Här skapar vi en lista med längderna på varje namn i names.
Dessa används för att sortera data i stigande respektive fallande ordning.
Exempel:
int[] numbers = { 5, 2, 9, 1, 4 };
var sortedNumbers = numbers.OrderBy(n => n).ToList();
Detta returnerar en lista där siffrorna är sorterade i stigande ordning.
GroupBy grupperar data baserat på en nyckel.
Exempel:
var students = new List<Student>
{
new Student { Name = "John", Grade = "A" },
new Student { Name = "Jane", Grade = "B" },
new Student { Name = "Jake", Grade = "A" }
};
var groupedStudents = students.GroupBy(s => s.Grade);
Här grupperar vi studenter efter deras betyg.
First returnerar det första elementet i en samling som matchar ett visst villkor, medan FirstOrDefault returnerar null om inget matchande element hittas.
Exempel:
int[] numbers = { 1, 2, 3, 4, 5 };
int firstEven = numbers.First(n => n % 2 == 0); // Returnerar 2
Aggregate är användbart för att skapa en kumulativ beräkning på en samling.
Exempel:
int[] numbers = { 1, 2, 3, 4 };
int sum = numbers.Aggregate((total, next) => total + next); // Resultat: 10
Här beräknar Aggregate summan av alla tal i listan.
LINQ gör det möjligt att kombinera olika operationer för att manipulera data på flera sätt, inklusive sortering, filtrering och projektioner (att omvandla data).
Exempel som kombinerar flera LINQ-metoder:
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// Filtrera jämna tal, kvadrera dem och sortera dem i fallande ordning
var result = numbers
.Where(n => n % 2 == 0)
.Select(n => n * n)
.OrderByDescending(n => n)
.ToList();
foreach (var num in result) {
Console.WriteLine(num); // Output: 100, 64, 36, 16, 4
}
Här filtreras alla jämna tal från listan, deras kvadrater beräknas, och sedan sorteras resultatet i fallande ordning.
För att tillämpa dagens koncept kan du prova följande övningar:
Grundläggande LINQ-fråga:
Filtrering och projektion:
Person-objekt som har attribut som Name och Age) och använd LINQ för att filtrera ut alla personer över en viss ålder och projicera deras namn till en ny lista.Gruppering med LINQ:
Användning av lambda-uttryck:
Select-metoden tillsammans med ett lambda-uttryck för att skapa en ny lista som omvandlar en lista med tal till deras kvadratrötter.Använd LINQ och lambda-uttryck i små steg i din kod för att testa olika funktioner och uttryck. LINQ är kraftfullt men kan bli svårt att läsa om det används på ett alltför komplext sätt, så sträva efter att skriva tydlig och begriplig kod.
Efter Dag 5 kommer du att ha en stark förståelse för hur LINQ och lambda-uttryck fungerar i C#. Du kommer att kunna skriva effektiva och läsbara
frågor för att manipulera data, vilket är en ovärderlig färdighet när du arbetar med stora eller komplexa datastrukturer.