linq in practice

8
LINQ in practice ”In theory there is no difference between theory and practice. But in practice there is”. Except in mathematics…

Upload: tuomas-hietanen

Post on 15-Jan-2015

559 views

Category:

Technology


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Linq in practice

LINQ in practice

”In theory there is no difference between theory and practice. But in practice there

is”. Except in mathematics…

Page 2: Linq in practice

Func<TIn1, TIn2, TOut>

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

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

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

Page 3: Linq in practice

IEnumerable<T>

Page 4: Linq in practice

” Infinite loop”

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

yield return• Return and continue

Page 5: Linq in practice

Filtered

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

Page 6: Linq in practice

It works!

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

IEnumerable<T> is lazy

Page 7: Linq in practice

What is inside LINQ?

Extension-methods, e.g.:

public static class FetchExtension{    public static IEnumerable<T> MyWhere<T>(

this IEnumerable<T> list, Func<T, bool> cond){

      foreach(var i in list){          if (cond(i)) yield return i;      }     }}

Page 8: Linq in practice

Imperative vs. declarative

How Whatvar result = new List<int>();foreach(var i in list){    if(i % 2 == 0){        result.Add(i);    }}

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