代码改变世界

SqlMethods

2011-05-13 15:18  观海看云  阅读(931)  评论(0编辑  收藏  举报
最近專案的關係,一直再想LINQ是否有提供T-SQL中的LIKE方法,於是找了一下MSDN,結果發現了SqlMethods類別。這類別確實好用,不過提供少是最大的遺憾。甚麼是SqlMethods呢!?它是一個對應SQL Server函式的方法,只有LINQ TO SQL才支援;換言之,就是LINQ TO SQL提供部分的SQL Server函式的方法。以下我們來介紹LIKE與DateDiffDay的用法:

1.SqlMethods類別:LIKE
01var result = from o in db.Orders
02             join od in db.Order_Details on o.OrderID equals od.OrderID
03             where SqlMethods.Like(o.ShipCountry, txtKeyWord.Text)
04                     select new newItem
05                     {
06                         OrderID = o.OrderID,
07                         CustomerID = o.CustomerID,
08                         ShipName = o.ShipName,
09                         ShipCity = o.ShipCity,
10                         ShipCountry = o.ShipCountry,
11                         UnitPrice = od.UnitPrice,
12                         Quantity = od.Quantity
13                     };


SqlMethods.Like(o.ShipCountry, txtKeyWord.Text)就是SqlMethods類別中LIKE的用法,畢竟它就是用T-SQL的LIKE,所以可以提供LIKE能用的萬用字元。以下是測試結果:





2.SqlMethods類別:DateDiffDay
01var result = from o in db.Orders
02                 join od in db.Order_Details on o.OrderID equals od.OrderID
03                 where SqlMethods.DateDiffDay(o.OrderDate, o.ShippedDate) > Convert.ToInt32(txtKeyWord.Text)
04                         select new newItem
05                         {
06                             OrderID = o.OrderID,
07                             CustomerID = o.CustomerID,
08                             ShipName = o.ShipName,
09                             ShipCity = o.ShipCity,
10                             ShipCountry = o.ShipCountry,
11                             UnitPrice = od.UnitPrice,
12                             Quantity = od.Quantity
13                         };


SqlMethods.DateDiffDay(o.OrderDate, o.ShippedDate) > Convert.ToInt32(txtKeyWord.Text)就是SqlMethods類別DateDiffDay,主要是計算出兩個日期間相差大於十天的訂單有哪些。以下是測試結果:


是不是有T-SQL的味道呢!?

SqlMethods類別所提供的函式不多,大多都是計算兩個日期的差及LIKE而已,有興趣的看倌可以到MSDN看看。

 

 

 在LINQ to SQL语句中,为我们提供了SqlMethods操作,进一步为我们提供了方便,例如Like方法用于自定义通配表达式,Equals用于相比较是否相等。

Like

自定义的通配表达式。%表示零长度或任意长度的字符串;_表示一个字符;[]表示在某范围区间的一个字符;[^]表示不在某范围区间的一个字符。比如查询消费者ID以“C”开头的消费者。 

var q = from c in db.Customers
where SqlMethods.Like(c.CustomerID, "C%")
select c;

比如查询消费者ID没有“AXOXT”形式的消费者:

var q = from c in db.Customers
where !SqlMethods.Like(c.CustomerID, "A_O_T")
select c;

DateDiffDay

说明:在两个变量之间比较。分别有:DateDiffDay、DateDiffHour、DateDiffMillisecond、DateDiffMinute、DateDiffMonth、DateDiffSecond、DateDiffYear 

var q = from o in db.Orders
where SqlMethods
.DateDiffDay(o.OrderDate, o.ShippedDate) < 10
select o;

语句描述:查询在创建订单后的 10 天内已发货的所有订单。