LINQ to SQL語句(14)之Null語義和DateTime

作者: 李永京  來源: 博客園  發布時間: 2008-09-18 16:44  閱讀: 9232 次  推薦: 0   原文鏈接   [收藏]  
摘要:這個系列的第十四篇,講解Null語義和DateTime用法。

系列文章導航:

LINQ to SQL語句(1)之Where

LINQ to SQL語句(2)之Select/Distinct

LINQ to SQL語句(3)之Count/Sum/Min/Max/Avg

LINQ to SQL語句(4)之Join

LINQ to SQL語句(5)之Order By

LINQ to SQL語句(6)之Group By/Having

LINQ to SQL語句(7)之Exists/In/Any/All/Contains

LINQ to SQL語句(8)之Concat/Union/Intersect/Except

LINQ to SQL語句(9)之Top/Bottom和Paging和SqlMethods

LINQ to SQL語句(10)之Insert

LINQ to SQL語句(11)之Update

LINQ to SQL語句(12)之Delete和使用Attach

LINQ to SQL語句(13)之開放式并發控制和事務

LINQ to SQL語句(14)之Null語義和DateTime

LINQ to SQL語句(15)之String

LINQ to SQL語句(16)之對象標識

LINQ to SQL語句(17)之對象加載

LINQ to SQL語句(18)之運算符轉換

LINQ to SQL語句(19)之ADO.NET與LINQ to SQL

LINQ to SQL語句(20)之存儲過程

LINQ to SQL語句(21)之用戶定義函數

LINQ to SQL語句(22)之DataContext

LINQ to SQL語句(23)之動態查詢

LINQ to SQL語句(24)之視圖

LINQ to SQL語句(25)之繼承

LINQ簡介

adsfsaf

 

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.Year

var q =
    from o in db.Orders
    where o.OrderDate.Value.Year == 1997
    select o;

語句描述:這個例子使用DateTime 的Year 屬性查找1997 年下的訂單。

2.DateTime.Month

var q =
    from o in db.Orders
    where o.OrderDate.Value.Month == 12
    select o;

語句描述:這個例子使用DateTime的Month屬性查找十二月下的訂單。

3.DateTime.Day

var q =
    from o in db.Orders
    where o.OrderDate.Value.Day == 31
    select o;

語句描述:這個例子使用DateTime的Day屬性查找某月 31 日下的訂單。

0
0
 
標簽:LINQ LINQ to SQL
 
 

文章列表

全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()