Linq 两个时间比较/LINQ to SQL语句之Null语义和String/DateTime方法

Linq 两个时间比较/LINQ to SQL语句之Null语义和String/DateTime方法

(2012-07-24 22:19:22)
标签: 

linq

 

datetime

 

string

 

it

分类: 编程技法

Linq 两个时间比较/LINQ to SQL语句之Null语义和String/DateTime方法

DateTime beginDate;
DateTime endDate;

//对beginDate、endDate赋值
...

//读取数据库资料,假设数据库栏位名为:dateX
var q=from t in db.tableX
where [b]t.dateX>=beginDate.Date &&t.dateX<=beginDate.Date.AddDays(1)[/b]

var query = from m in DBContext.T_Oyego_Experience
where m.Date.CompareTo(Enddate) >= 0 && m.Date.CompareTo(startdate) <= 0
orderby m.Date descending
select m;
用Compareto可以对日期比较判断

在本系列中,主要介绍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 to SQL基础的东西就这么多了,这一篇用一些例子说明一下Null语义和String/DateTime方法。

Null语义

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

1.Null

var q = from in db.Employees where e.ReportsToEmployee == null select e;

2.Nullable<T>.HasValue

var q = from in db.Employees where !e.ReportsTo.HasValue select e;

3.Nullable<T>.Value

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

String/Date Functions(字符串/日期方法)

LINQ to SQL支持以下String方法。但是不同的是默认情况下System.String 方法区分大小写。而SQL则不区分大小写。

1.String Concatenation

var q = from in db.Customers select new { c.CustomerID, Location = c.City + ", " + c.Country };

这个例子使用了+操作符重新组合了顾客的区域。

2.String.Length

var q = from in db.Products where p.ProductName.Length < 10 select p;

这个例子用Length属性来查询所有产品名称长度小于10的产品。

3.String.Contains(substring)

var q = from in db.Customers where c.ContactName.Contains("Anders"select c;

使用Contains方法查询联系人名称包含"Anders"所有的顾客。

4.String.IndexOf(substring)

var q = from in db.Customers select new { c.ContactName, SpacePos = c.ContactName.IndexOf(" ") };

这个实例说明ContactName第一个匹配项的索引有一个空格的顾客。

下面两个实例说明ContactName以"Maria"开头,以"Anders"结尾的顾客。接下来的方法看看例子很快就明白了。

5.String.StartsWith(prefix)

var q = from in db.Customers where c.ContactName.StartsWith("Maria"select c;

6.String.EndsWith(suffix)

var q = from in db.Customers where c.ContactName.EndsWith("Anders"select c;

7.String.Substring(start)

var q = from in db.Products select p.ProductName.Substring(3);

8.String.Substring(start, length)

var q = from in db.Employees where e.HomePhone.Substring(6, 3) == "555" select e;

9.String.ToUpper()

var q = from in db.Employees select new { LastName = e.LastName.ToUpper(), e.FirstName };

10.String.ToLower()

var q = from in db.Categories select c.CategoryName.ToLower();

11.String.Trim()

var q = from in db.Employees select e.HomePhone.Substring(0, 5).Trim();

12.String.Insert(pos, str)

var q = from in db.Employees where e.HomePhone.Substring(4, 1) == ")" selecte.HomePhone.Insert(5, ":");

13.String.Remove(start)

var q = from in db.Employees where e.HomePhone.Substring(4, 1) == ")" selecte.HomePhone.Remove(9);

14.String.Remove(start, length)

var q = from in db.Employees where e.HomePhone.Substring(4, 1) == ")" selecte.HomePhone.Remove(0, 6);

15.String.Replace(find, replace)

var q = from in db.Suppliers select new { s.CompanyName, Country = s.Country .Replace("UK""United Kingdom") .Replace("USA""United States of America") };

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 或固定时间要自己执行转换。

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

16.DateTime.Year

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

17.DateTime.Month

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

18.DateTime.Day

var q = from in db.Orders where o.OrderDate.Value.Day == 31 select o;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值