border=0></td><td class=ForsideForumArtiklerDownloadWeblogsCommunity
 
 
Artikler » LINQ »
 

Velkommen
Velkommen til ActiveDeveloper. ActiveDeveloper er et samlingssted for webudviklere der primært udvikler i ASP eller ASP.NET.

Afstemning

Hvor koder du mest på?

Hyggeprojekter
Professionele projekter


For at bruge afstemningen skal man være medlem af vores community!

Updates
Community : Slet din profil
Kurser : Tag på kursus med ActiveDeveloper
Kode Snippets : Ny sektion
Brevkassen : Lever igen :0)
Nyt favicon
Forum : Godkendelse af svar.
Forum : Antal besked visninger.

LINQ og Standard Query Operators (STQO).

Artiklen er sponsoreret af:

Diskuter denne artikel i forummet.

Som kort fortalt I den forrige artikel så udgør Standard Query Operators metoderne størstedelen af LINQ mønsteret.
Mange af disse metoder bruger den type du angiver i din query og kan bruges til bla. sortere, aggrerer og filtrere med.

Der findes 2 sæt af LINQ Standard Query Operators, et der er til IEnumerable<T> data kilder og det andet til IQueryable<T> data kilder.
De to klasser hedder Enumberable og Queryable og indeholder kun statiske metoder der er implementeret som extension methods.

Hvad er en Extension Method ?

Det er en speciel statisk metode som muliggør det, at videreudvikle oprindelige typer, uden at skulle arve eller modificere en anden type.

F.eks kunne du lave en extension metode som nedenstående.

namespace SQO.ExtensionMethods
{
  public static class IntergerExtensions
  {
    public static int SumNumbers(this int number1, int number2)
    {
      return number1 + number2;
    }
  }
}

Det eneste synlige der er forskellen mellem denne extension og en almindelig statisk metode er ”this” i parameter listen på selve metoden.
En extension metode arbejder med den første parameter i listen og vil derfor i dette tilfælde kun være nødvendigt at give den number2 parameteren.

Når du arbejder med extension metoder skal du bare angive det namespace de ligger under, i den klasse du selv står i.

Så i dette tilfælde vil klassen der bruger extensionen se således ud:

using SQO.ExtensionMethods;

namespace SQO
{
  class Program
  {
    static void Main(string[] args)
    {
      int num1 = 4;
      int num2 = 10;

      Console.WriteLine(num1.SumNumbers(num2));

      Console.ReadLine();
    }
  }
}


Du kan både kalde din extension med eller uden (static) instans.

Det er samme tilfælde med LINQ extensions.

De ligger under namespacet System.Linq, og ligeså snart du bruger dette namespace i din klasse, vil dine IEnumerable/IQueryable typer kunne drage nytte af de extensions fra det namespace.

Har en extension metode samme signatur som et interface, metode eller property, som allerede er en del af den type extensionen arbejder med, bliver extension ikke kaldt.
Det skyldes at extension metoder er af lavere priotet end de metoder der er indbygget i typen.
Så derfor er det en god regel at finde på sine egne navne til sine extensions.

En anden god skik er, at holde sig, så vidt muligt, til de extensions og metoder der allerede er i frameworket og kun bygge egne extensions når det er absolut nødvendigt.
Det skyldes bla. at ens extension kan ødelægges hvis den underlæggende type ændres.

IEnumerable<T> og IQueyable<T> interface’ne.

Extension metoder der benytter sig collections af typen IEnumerable<T> opsnapper de parametre der er sendt til dem, og først når der kaldes GetEnumerator
på det returnerede IEnumerable<T> object bliver disse taget højde for.

Det giver mening når du kigger på koden her.

List<User> users = new List<User>();

users.Add(new User("daniel"));
users.Add(new User("dennis"));
users.Add(new User("deldy"));
users.Add(new User("nis"));
users.Add(new User("svend"));

var query = from user in users where user.Username.StartsWith("d") select user;

var newQuery = from user in query where user.Username.IndexOf("n", 0) > 0 select user;

users.Add(new User("dingo"));

Selvom vi tilføjer en ny User til collection efter vores LINQ bliver denne taget med når vores LINQ eksekveres. (Deffered execution).

Extension metoder på IQueryable<T> implementere ikke nogen mulighed for at lave forspørgsler men bygger derimod et ”expression tree” der repræsentere en LINQ.

Så lærte du lidt om extension methods og hvordan de er implementeret i forhold til LINQ mønseret.

Nok teori, nu skal se lidt nærmere på hvad LINQ kan gøre for dig når du bruger det sammen med din SQL database.

Stay tuned.

Kommentarer fra vores community medlemmer
Der er endnu ikke nogen som har kommenteret denne side. Skal du være den første?

Bliv medlem af vores community

Du skal være medlem af vores community for at kommentere siden.

 Klik her for at blive medlem (det er 100% gratis)


Login
Brugernavn:

Adgangskode:

Husk login
Autologin

» Glemt password?
» Bliv medlem

Muligheder
E-mail siden
Udskriv siden
Søgning
Nyhedsbrev
Rapporter fejl

 
Proudly hosted by ActiveWebs.dk Annoncer | Juridiske informationer | Credits | Kontakt