转自:http://blog.csdn.net/q107770540/article/details/7348384
在论坛里不止一次看到有网友提问关于LINQ NULL查询的问题了,现以微软NorthWind 数据库为例总结一下:
如查询这样一句SQL ,用LINQ如何实现?
- SELECT *
- FROM [Orders] AS [t0]
- WHERE ([t0].[ShippedDate]) IS NULL
v 方法一:
- from o in Orders
- where o.ShippedDate==null
- select o
对应的Lamda表达式为:
- Orders
- .Where (o => (o.ShippedDate == (DateTime?)null))
对应的SQL语句为:
- SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[RequiredDate], [t0].[ShippedDate], [t0].[ShipVia], [t0].[Freight], [t0].[ShipName], [t0].[ShipAddress], [t0].[ShipCity], [t0].[ShipRegion], [t0].[ShipPostalCode], [t0].[ShipCountry]
- FROM [Orders] AS [t0]
- WHERE [t0].[ShippedDate] IS NULL
v 方法二:
- from o in Orders
- where Nullable<DateTime>.Equals(o.ShippedDate,null)
- select o
对应的Lamda表达式为:
- Orders
- .Where (o => Object.Equals (o.ShippedDate, null))
对应的SQL语句为:
- SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[RequiredDate], [t0].[ShippedDate], [t0].[ShipVia], [t0].[Freight], [t0].[ShipName], [t0].[ShipAddress], [t0].[ShipCity], [t0].[ShipRegion], [t0].[ShipPostalCode], [t0].[ShipCountry]
- FROM [Orders] AS [t0]
- WHERE [t0].[ShippedDate] IS NULL
v 方法三:
- from o in Orders
- where !o.ShippedDate.HasValue
- select o
对应的Lamda表达式为:
- Orders
- .Where (o => !(o.ShippedDate.HasValue))
对应的SQL语句为:
- SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[RequiredDate], [t0].[ShippedDate], [t0].[ShipVia], [t0].[Freight], [t0].[ShipName], [t0].[ShipAddress], [t0].[ShipCity], [t0].[ShipRegion], [t0].[ShipPostalCode], [t0].[ShipCountry]
- FROM [Orders] AS [t0]
- WHERE NOT ([t0].[ShippedDate] IS NOT NULL)
v 方法四:
- from o in Orders
- where o.ShippedDate.Value==(DateTime?)null
- select o
对应的Lamda表达式为:
- Orders
- .Where (o => ((DateTime?)(o.ShippedDate.Value) == (DateTime?)null))
对应的SQL语句为:
- SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[RequiredDate], [t0].[ShippedDate], [t0].[ShipVia], [t0].[Freight], [t0].[ShipName], [t0].[ShipAddress], [t0].[ShipCity], [t0].[ShipRegion], [t0].[ShipPostalCode], [t0].[ShipCountry]
- FROM [Orders] AS [t0]
- WHERE ([t0].[ShippedDate]) IS NULL
v 方法五:
- from o in Orders
- where System.Data.Linq.SqlClient.SqlMethods.Equals(o.ShippedDate.Value,null)
- select o
对应的Lamda表达式为:
- Orders
- .Where (o => Object.Equals (o.ShippedDate.Value, null))
对应的SQL语句为:
- SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t0].[RequiredDate], [t0].[ShippedDate], [t0].[ShipVia], [t0].[Freight], [t0].[ShipName], [t0].[ShipAddress], [t0].[ShipCity], [t0].[ShipRegion], [t0].[ShipPostalCode], [t0].[ShipCountry]
- FROM [Orders] AS [t0]
- WHERE ([t0].[ShippedDate]) IS NULL
以上方法均只在LINQ TO SQL内验证实现,LINQ TO EF未验证。