// 在記憶體篩選 (LINQ to Objects) var result = products.Where(p => p.UnitPrice < 20 && p.CategoryID == 6).Count();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
exec sp_executesql N'SELECT [Extent1].[ProductID] AS [ProductID], [Extent1].[ProductName] AS [ProductName], [Extent1].[SupplierID] AS [SupplierID], [Extent1].[CategoryID] AS [CategoryID], [Extent1].[QuantityPerUnit] AS [QuantityPerUnit], [Extent1].[UnitPrice] AS [UnitPrice], [Extent1].[UnitsInStock] AS [UnitsInStock], [Extent1].[UnitsOnOrder] AS [UnitsOnOrder], [Extent1].[ReorderLevel] AS [ReorderLevel], [Extent1].[Discontinued] AS [Discontinued] FROM [dbo].[Products] AS [Extent1] WHERE [Extent1].[UnitPrice] < @p__linq__0',N'@p__linq__0 decimal(2,0)',@p__linq__0=20
// 條件會被轉成 SQL var result = products.Where(p => p.UnitPrice < 20 && p.CategoryID == 6).Count();
EF 會產生的 SQL(Count + 條件全部下到 DB)
1 2 3 4 5 6 7 8 9
exec sp_executesql N'SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[Products] AS [Extent1] WHERE ([Extent1].[UnitPrice] < @p__linq__0) AND (6 = [Extent1].[CategoryID]) ) AS [GroupBy1]',N'@p__linq__0 decimal(2,0)',@p__linq__0=20