クエリ式とメソッド呼び出しの関係
こんなかんじで
var employees = from e in db.Employee where e.Salary > 2000 orderby e.EmployeeName select e;
SQLっぽく書けるけど(これをクエリ式という)、上のクエリ式は次のようにメソッド呼び出しで書くのとなんら変わらない。クエリ式はこのようなメソッド呼び出しのシンタックスシュガー。
var employees = db.Employee .Where(e => e.Salary > 2000) .OrderBy(e => e.EmployeeName);
WhereとかOrderByはIEnumerableの拡張メソッドで本体はSystem.Linq.Enumerableクラスにstaticなメソッドとして定義されている。だから、拡張メソッドをわざと利用しないとこんな感じにも書ける。
IEnumerable<Employee> employees = db.Employee; employees = Enumerable.Where(db.Employee, e => e.Salary > 2000); employees = Enumerable.OrderBy(employees, e => e.EmployeeName); foreach (var e in employees) { Console.WriteLine(e.EmployeeName); }
拡張メソッドおもしろい。
クエリ式がメソッド呼び出しのシンタックスシュガーに過ぎないとわかったけど、どっちをつかうか迷うなぁ。どっちでより簡潔にかけるかはそのときの問い合わせ次第みたい。例えば、上の例だと、メソッド呼び出しで十分簡単だけど結合とかはクエリ式の方が楽みたい。
クエリ式で結合
var employees = from e in db.Employee join d in db.Department on e.DepartmentId equals d.DepartmentId where e.Salary > 2000 orderby e.EmployeeName select e;