using (NorthwindEntities context = new NorthwindEntities())
{
var order = from n in context.Orders select n;
foreach (var i in order.ToList())
{
Console.Write(i.Customers);
Console.WriteLine();
}
}
生成SQL語句為:
SELECT
[Extent1].[OrderID] AS [OrderID],
[Extent1].[CustomerID] AS [CustomerID],
[Extent1].[EmployeeID] AS [EmployeeID],
[Extent1].[OrderDate] AS [OrderDate],
[Extent1].[RequiredDate] AS [RequiredDate],
[Extent1].[ShippedDate] AS [ShippedDate],
[Extent1].[ShipVia] AS [ShipVia],
[Extent1].[Freight] AS [Freight],
[Extent1].[ShipName] AS [ShipName],
[Extent1].[ShipAddress] AS [ShipAddress],
[Extent1].[ShipCity] AS [ShipCity],
[Extent1].[ShipRegion] AS [ShipRegion],
[Extent1].[ShipPostalCode] AS [ShipPostalCode],
[Extent1].[ShipCountry] AS [ShipCountry]
FROM [dbo].[Orders] AS [Extent1]
var product = from n in context.Products
.Select(p => new { p.CategoryID, p.ProductName })
select n;
也可以是:
var product = context.Products.Select(p => new { p.CategoryID, p.ProductName });
生成SQL語句為:
SELECT
1 AS [C1],
[Extent1].[CategoryID] AS [CategoryID],
[Extent1].[ProductName] AS [ProductName]
FROM [dbo].[Products] AS [Extent1]
var product = context.Products.FirstOrDefault();
var product = context.Products.First();
生成SQL語句為:
SELECT TOP (1)
[c].[ProductID] AS [ProductID],
[c].[ProductName] AS [ProductName],
[c].[SupplierID] AS [SupplierID],
[c].[CategoryID] AS [CategoryID],
[c].[QuantityPerUnit] AS [QuantityPerUnit],
[c].[UnitPrice] AS [UnitPrice],
[c].[UnitsInStock] AS [UnitsInStock],
[c].[UnitsOnOrder] AS [UnitsOnOrder],
[c].[ReorderLevel] AS [ReorderLevel],
[c].[Discontinued] AS [Discontinued]
FROM [dbo].[Products] AS [c]
var product = context.Products.Single(p => p.ProductID==1);
var product = context.Products.SingleOrDefault(p => p.ProductID==1);
生成的SQL語句為:
SELECT TOP (2)
[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 1 = [Extent1].[ProductID]
區別:
First:取序列中滿足條件的第一個元素,如果沒有元素滿足條件,則拋出異常。
FirstOrDefault:取序列中滿足條件的第一個元素,如果沒有元素滿足條件,則返回默認值(對於可以為null的對象,默認值為null,對於不能為null的對象,如int,默認值為0)。
Single:返回序列中的唯一一條記錄,如果沒有或返回多條,則引發異常。
SingleOrDefault:返回序列中的唯一一條記錄,如果序列中不包含任何記錄,則返回默認值,如果返回多條,則引發異常。
使用場景:
當沒有元素滿足條件時,First會拋出異常,FirstOrDefault會返回默認值。
1. First當確信有元素滿足條件時,使用First方法。取到元素後,無需判斷是否為null。
2. 當不確信或序列中找不到滿足條件的元素時,使用FirstOrDefault方法。然後一定要對返回值進行判斷是否為null,進行不同的處理