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

Linq in practice

Embed Size (px)

DESCRIPTION

 

Citation preview

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;