tankar om LINQ

Linq introducerades i .NET 3.0 och sammanfattas på följande sätt på hemsidan:

“The LINQ Project is a codename for a set of extensions to the .NET Framework that encompass language-integrated query, set, and transform operations. It extends C# and Visual Basic with native language syntax for queries and provides class libraries to take advantage of these capabilities.”

Allt fint och bra. Men vad innebär det för utvecklaren. Här är ett exempel:


int[] numbers = new int[] {5, 7, 1, 4, 9, 3, 2, 6, 8};

var smallnumbers = from n in numbers
where n <= 5
orderby n
select n;

foreach(var n in smallnumbers) {
Console.WriteLine(n);
}

Det speciella är förstås where, orderby och select. Tillsammans (eller ensamma) utgör dessa operatorer ett query expression och jobbar mot en datakälla, i detta fall en integer array. I det fall datakällan är en databas (eller någon annan datakälla) så kommer operatorerna internt att (whereorderby och select) ha olika implementationer:

“The extensibility of the query architecture is used in the LINQ project itself to provide implementations (of the operators) that work over both XML and SQL data.”

Frågan kan också skrivas med lambda-statements:

names
.Where(s => s.Length == 5)
.OrderBy(s => s)
.Select(s => s.ToUpper());

Lite mer likt vanliga metodanrop och är det som egentligen är det som den ursprunliga kod-snippeten översätts till. Argumenten till operatorerna kallas för lambda-uttryck. Lambda-uttrycken kan i sig deklareras som funktioner i sig som


Func filter = s => s.Length == 5;

och användas i metod-anropet ovan som


names
.Where(filter)
.OrderBy(s => s)
.Select(s => s.ToUpper());

Lambda-uttryck kan också kompileras antingen som kod eller som data. Dvs, vi kan spara lambda-uttryck i settings-filer (tex).

Nästa blog blir om typen Expression samt om Extension-metoder vilka båda är en del av hela LINQ-arkitekturen. Och jag antar att jag måste förstå dessa för att kunna gå vidare på ett bra sätt med LINQ.

Utforska inlägg i samma kategori: Programming

Lämna en kommentar

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logga ut / Ändra )

Twitter-bild

You are commenting using your Twitter account. Logga ut / Ändra )

Facebook-foto

You are commenting using your Facebook account. Logga ut / Ändra )

Ansluter till %s


Follow

Get every new post delivered to your Inbox.