最近專案的關係,一直再想LINQ是否有提供T-SQL中的LIKE方法,於是找了一下MSDN,結果發現了SqlMethods類別。這類別確實好用,不過提供少是最大的遺憾。甚麼是SqlMethods呢!?它是一個對應SQL Server函式的方法,只有LINQ TO SQL才支援;換言之,就是LINQ TO SQL提供部分的SQL Server函式的方法。以下我們來介紹LIKE與DateDiffDay的用法:
1.SqlMethods類別:LIKE
SqlMethods.Like(o.ShipCountry, txtKeyWord.Text)就是SqlMethods類別中LIKE的用法,畢竟它就是用T-SQL的LIKE,所以可以提供LIKE能用的萬用字元。以下是測試結果:
![](http://files.dotblogs.com.tw/dc690216/0909/20099132249955.jpg)
![](http://files.dotblogs.com.tw/dc690216/0909/200991322515304.JPG)
![](http://files.dotblogs.com.tw/dc690216/0909/200991322612759.JPG)
![](http://files.dotblogs.com.tw/dc690216/0909/200991322642119.JPG)
2.SqlMethods類別:DateDiffDay
SqlMethods.DateDiffDay(o.OrderDate, o.ShippedDate) > Convert.ToInt32(txtKeyWord.Text)就是SqlMethods類別DateDiffDay,主要是計算出兩個日期間相差大於十天的訂單有哪些。以下是測試結果:
![](http://files.dotblogs.com.tw/dc690216/0909/200991322111267.JPG)
是不是有T-SQL的味道呢!?
SqlMethods類別所提供的函式不多,大多都是計算兩個日期的差及LIKE而已,有興趣的看倌可以到MSDN看看。
1.SqlMethods類別:LIKE
01
var 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能用的萬用字元。以下是測試結果:
![](http://files.dotblogs.com.tw/dc690216/0909/20099132249955.jpg)
2.SqlMethods類別:DateDiffDay
01
var 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 天内已发货的所有订单。