Linq in practice

Post on 15-Jan-2015

559 views 3 download

description

 

Transcript of Linq in practice

LINQ in practice

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

is”. Except in mathematics…

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;

IEnumerable<T>

” Infinite loop”

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

yield return• Return and continue

Filtered

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

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

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;      }     }}

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;