Upload
tuomas-hietanen
View
532
Download
6
Embed Size (px)
DESCRIPTION
LINQ käytännössä. Sanko F# -tapahtuman diasarja
Citation preview
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…
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;
IEnumerable<T>
”Ikiluuppi”
public static IEnumerable<int> LuonnollisetLuvut() { int i=0; while(true){ yield return i++; } }
yield return• Palauta ja jatka
Suodatettu
public static IEnumerable<int> Parittomat() { return LuonnollisetLuvut().Where(i=>i%2==1);}
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
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; } }}
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;