LINQ

LINQ to Objects と LINQ to SQL(他サイト参照)

★System.Linq.Enumerable vs System.Linq.Queryable

Enumerable

検索引数はFunc<>

Local Dataに向け

Queryable

検索引数はExpression<>

Remote Dataに向け

★Lazy evaluation vs Eager evaluation

var list = new List<int>(){1,2,3,4,5};

var temp1 = from c in list where c > 3 select c;

var temp2 = (from c in list where c > 3 select c).ToList<int>(); //SQL文を実行

list[0] = 9;

foreach (var item in temp1) //SQL文を実行(Lazy)

{

Console.Write(item); //945

}

Console.WriteLine();

foreach (var item in temp2)

{

Console.Write(item); //45

}

★LINQ To File

string directoryName = Path.GetDirectoryName(appPath);

DirectoryInfo dir = new DirectoryInfo(directoryName);

IEnumerable<FileInfo> fileList

= dir.GetFiles("*.*", SearchOption.TopDirectoryOnly);

var listFiles = from f in fileList select f;

foreach(var f in listFiles)

{

Console.WriteLine(f.Name);

}

★LINQ To Array

string[] array = new string[]{".gif", ".jpg", ".bmp"};

StringComparer comparer = StringComparer.OrdinalIgnoreCase;

bool flg = array.Any(c => comparer.Equals(c, ".JPG"));

★LINQメソッド

・メソッドによって戻り値が違う

Product result = product.Single(p => p.ProductID == 5);

IEnumerable<int> result = product.Select(p => p.ProductID > 5);

IEnumerable<Product> result = product.Where(p => p.ProductID > 5);

・Lazyモデル

・Eagerモデル