8
LINQ käytännössä ”Teoriassa teoria ja käytäntö ovat sama asia, mutta käytännössä ne eivät ole”. Paitsi matematiikassa…

LINQ käytännössä

Embed Size (px)

DESCRIPTION

LINQ käytännössä. Sanko F# -tapahtuman diasarja

Citation preview

Page 1: LINQ käytännössä

LINQ käytännössä

”Teoriassa teoria ja käytäntö ovat sama asia, mutta käytännössä ne eivät ole”. Paitsi matematiikassa…

Page 2: LINQ käytännössä

Func<TSisään1, TSisään2, TUlos>

public int PlusViis(int i){    return i+5;}

Func<int, int> PlusViis =  delegate(int i) { return i + 5; };

Func<int, int> PlusViis = i => i + 5;

Page 3: LINQ käytännössä

IEnumerable<T>

Page 4: LINQ käytännössä

”Ikiluuppi”

public static IEnumerable<int> LuonnollisetLuvut() { int i=0; while(true){ yield return i++; } }

yield return• Palauta ja jatka

Page 5: LINQ käytännössä

Suodatettu

public static IEnumerable<int> Parittomat() { return LuonnollisetLuvut().Where(i=>i%2==1);}

Page 6: LINQ käytännössä

Toimii!

static void Main(string[] args){    var luvut = Parittomat().Take(5);    //var suoritettu = luvut.ToList();    foreach(var i in luvut)         Console.WriteLine(i);}

IEnumerable<T> on laiska

Page 7: LINQ käytännössä

Mitä on LINQ:n sisällä?

Extension-metodeita, esim:

public static class HakuExtension{    public static IEnumerable<T> Missä<T>(

this IEnumerable<T> lista, Func<T, bool> ehto){

      foreach(var i in lista){          if (ehto(i)) yield return i;      }     }}

Page 8: LINQ käytännössä

Imperatiivinen vs. deklaratiivinen

Miten Mitävar result = new List<int>();foreach(var i in lista){    if(i % 2 == 0){        result.Add(i);    }}

var result =    from i in lista    where i % 2 == 0    select i;