LINQ to SQL语句(14)之Null语义和DateTime

Null语义

说明:下面第一个例子说明查询ReportsToEmployee为null的雇 员。第二个例子使用Nullable<T>.HasValue查询雇员,其结果与第一个例 子相同。在第三个例子中,使用Nullable<T>.Value来返回 ReportsToEmployee不为null的雇员的ReportsTo的值。

1.Null

查找不 隶属于另一个雇员的所有雇员:

var q =
  from e in db.Employees
  where e.ReportsToEmployee == null
   select e;
2.Nullable<T>.HasValue

查找不隶属于另一个雇员 的所有雇员:

var q =
  from e in db.Employees
  where !e.ReportsTo.HasValue
  select e;
3.Nullable<T>.Value

返回前者的EmployeeID 编号。请注意 .Value 为可选:

var q =
  from e in db.Employees
  where e.ReportsTo.HasValue
  select new
  {
    e.FirstName,
    e.LastName,
    ReportsTo = e.ReportsTo.Value
  };
日期函数

LINQ to SQL支持以下 DateTime方法。但是,SQL Server和CLR的DateTime类型在范围和计时周期精度 上不同,如下表。

类型 最小值 最大 值 计时周期
System.DateTime 0001 年 1 月 1 日 9999 年 12 月 31 日 100 毫微秒(0.0000001 秒)
T-SQL DateTime 1753 年 1 月 1 日 9999 年 12 月 31 日 3.33… 毫秒(0.0033333 秒)
T-SQL SmallDateTime 1900 年 1 月 1 日 2079 年 6 月 6 日 1 分钟(60 秒)

CLR DateTime 类型与SQL Server类型相比,前者范围更 大、精度更高。因此来自SQL Server的数据用CLR类型表示时,绝不会损失量值 或精度。但如果反过来的话,则范围可能会减小,精度可能会降低;SQL Server 日期不存在TimeZone概念,而在CLR中支持这个功能。

我们在LINQ to SQL查询使用以当地时间、UTC 或固定时间要自己执行转换。

下面用三个 实例说明一下。

1.DateTime.Yearvar q =
  from o in db.Orders
  where o.OrderDate.Value.Year == 1997
   select o;

语句描述:这个例子使用DateTime 的Year 属性查找1997 年下的订单。

2.DateTime.Monthvar q =
  from o in db.Orders
  where o.OrderDate.Value.Month == 12
  select o;

语句描述:这个例子使用DateTime的Month属性查找十二月下的订 单。

3.DateTime.Dayvar q =
  from o in db.Orders
  where o.OrderDate.Value.Day == 31
  select o;

语 句描述:这个例子使用DateTime的Day属性查找某月 31 日下的订单。

时间: 2024-08-31 16:07:44

LINQ to SQL语句(14)之Null语义和DateTime的相关文章

LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作

我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作 .这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作插入(Insert)1.简单形式 说明:new一个 对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges ()提交到数据库. NorthwindDataContext db = new NorthwindDataContext(); var newCustome

LINQ体验(8)—LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Pag

LINQ体验(8)-LINQ to SQL语句之Union All/Union/Intersect和Top/Bottom和Paging和SqlMethods 我们继续讲解LINQ to SQL语句,这篇我们来讨论Union All/Union/Intersect操作和Top/Bottom操作和Paging操作和SqlMethods操作 . Union All/Union/Intersect操作 适用场景:对两个集合的处理,例如追加.合并.取相同项.相交项等等. Concat(连接) 说明:连接不

LINQ体验(7)-LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains

我们继续讲解LINQ to SQL语句,这篇我们来讨论Group By/Having操作符和 Exists/In/Any/All/Contains操作符. Group By/Having操作符 适用 场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入 参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式: var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述:使用Group By

LINQ体验(5)——LINQ to SQL语句之Select/Distinct和Count/Sum/Min/Max/Avg

上一篇讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ to SQL语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to DataSets.LINQ to SQL.LINQ to Entities.LINQ to XML,但是相对来说LINQ to SQL在我们程序中使用最多,毕竟所 有的数据都要在数据库运行着各种操作.所以先来学习LINQ to SQL,其它的都差不多了,那么就从Select说起吧,这个在编写程序中也最为常

sql 语句中的 NULL值_MsSql

今天写了这样的代码 复制代码 代码如下: DECLARE @atr NVARCHAR(20) SET @atr = NULL IF(@atr = NULL) BEGIN PRINT 1 END 原本是想打印出1的.但是没有. 把 代码修改成如下: DECLARE @atr NVARCHAR(20) SET @atr = NULL IF(@atr IS NULL) BEGIN PRINT 1 END 这样就正确打印出1了. 然后自己有做了如下的修改,把if语句修改成 复制代码 代码如下: IF(N

LINQ体验(11)——LINQ to SQL语句之Null语义和String/DateTime方法

在本系列中,主要介绍LINQ to SQL基础的东西,因为LINQ太强大了,它对我 们平常使用不同的数据源有着不同的内容,其包括对于SQL Server 数据库的 LINQ to SQL:对于XML 文档的LINQ to XML:对于 ADO.NET 数据集的LINQ to DataSet:对于.NET 集合.文件.字符串等的LINQ to Objects.例外也出现了 一些对LINQ支持的开源项目,例如LINQ to JSON,LINQ for NHibernate等等. 在这个系列中,一些关

LINQ体验(14)——LINQ to SQL语句之存储过程

存储过程 在我们编写程序中,往往需要一些存储过程,在LINQ to SQL中 怎么使用呢?也许比原来的更简单些.下面我们以NORTHWND.MDF数据库中自带的 几个存储过程来理解一下. 1.标量返回 在数据库中,有名为 Customers Count By Region的存储过程.该存储过程返回顾客所在 "WA"区域的数量. ALTER PROCEDURE [dbo]. [NonRowset] (@param1 NVARCHAR(15)) AS BEGIN SET NOCOUNT O

LINQ to SQL语句(10)之Insert

插入(Insert)1.简单形式 说明:new一个对象,使用InsertOnSubmit方法 将其加入到对应的集合中,使用SubmitChanges()提交到数据库. NorthwindDataContext db = new NorthwindDataContext(); var newCustomer = new Customer { CustomerID = "MCSFT", CompanyName = "Microsoft", ContactName = &

LINQ体验(18)——LINQ to SQL语句之视图和继承支持

视图 我们使用视图和使用数据表类似,只需将视图从"服务器资源 管理器/数据库资源管理器"拖动到O/R 设计器上,自动可以创建基于这些 视图的实体类.我们可以同操作数据表一样来操作视图了.这里注意:O/R 设计 器是一个简单的对象关系映射器,因为它仅支持 1:1 映射关系.换句话说,实 体类与数据库表或视图之间只能具有 1:1 映射关系.不支持复杂映射(例如, 将一个实体类映射到多个表).但是,可以将一个实体类映射到一个联接多个相 关表的视图. 下面使用NORTHWND数据库中自带的In