(エンティティ フレームワークを使用)
私が書くとき:
IEnumerable<string> q = customers /*EF entity*/
.Select (c => c.Name.ToUpper())
.OrderBy (n => n)
C# コンパイラは式ツリーを出力する方法を認識しており、それによって SQL が実行されます。
SELECT UPPER (Name) FROM Customer ORDER BY UPPER (Name)
order by
節があることにも注意してください
しかし
私はこのリンクを見ました :
彼が書きました :
IEnumerable<employee> emp =
dc.Employees.Where(x => x.Desc.StartsWith("soft"));
emp = emp.Take(1);
彼が見た最後のクエリを調査した後:
SELECT [t0].[Id], [t0].[Name], [t0].[Address], [t0].[Desc] AS [Desc]
FROM [dbo].[Employee] AS [t0]
WHERE [t0].[Desc] LIKE @p0
条項がないことに注意してください top
何故ですか ?
Take(x)
クエリに追加しないでください。
次のように書きます:
IEnumerable<employee> emp =
(dc.Employees.Where(x => x.Desc.StartsWith("soft"))).Take(1);
SQL に送信されるクエリに TOP 句を追加しますか?
ここで何が起こっているのですか?
take
(私はそれが遅延実行ではないことをすでに知っています)