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モデル