linq to sql实战
1.Concat(連接)
連接不同集合的記錄,不會(huì)過(guò)濾相同的記錄。
(from c in Customers
select c.City).Concat
(
?from c in Customers
?select c.Phone
)
注意:City和Phone都是在一列當(dāng)中
2.Union(合并)
連接不同集合的記錄,會(huì)過(guò)濾相同的記錄。
(from c in Customers
select c.City).Concat
(
?from c in Customers
?select c.Phone
)
3.Intersect(相交)
連接不同集合的記錄,取相同的記錄。
4.Except
連接不同集合的記錄,排除相交項(xiàng)。是指第一個(gè)集合里面排除與第二個(gè)集合里相同的記錄。
?
Sql當(dāng)中的top操作和bottom操作
1.?????? take
取前幾條記錄
2.?????? skip
說(shuō)明:跳過(guò)集合的前n個(gè)元素
SqlMethods操作
在LINQ to SQL語(yǔ)句中,為我們提供了SqlMethods操作,進(jìn)一步為我們提供了方便,例如Like方法用于自定義通配表達(dá)式,Equals用于相比較是否相等。
Like
from c in Customers
???????? where SqlMethods.Like(c.Country,"%c%")
???????? select c.Country
DateDiffDay
說(shuō)明:在兩個(gè)變量之間比較。分別有:DateDiffDay、DateDiffHour、DateDiffMillisecond、DateDiffMinute、DateDiffMonth、DateDiffSecond、DateDiffYear?
from c in Orders
where SqlMethods.DateDiffDay(c.OrderDate,c.ShippedDate)<10
select c
Compiled Query操作
說(shuō)明:在之前我們沒(méi)有好的方法對(duì)寫(xiě)出的SQL語(yǔ)句進(jìn)行編輯重新查詢(xún),現(xiàn)在我們可以這樣做,看下面一個(gè)例子:
//1.創(chuàng)建compiled query
NorthwindDataContext db = new NorthwindDataContext();
var fn = CompiledQuery.Compile(
??? (NorthwindDataContext db2, string city) =>
??? from c in db2.Customers
??? where c.City == city
??? select c);
//2.查詢(xún)城市為London的消費(fèi)者,用LonCusts集合表示,這時(shí)可以用數(shù)據(jù)控件綁定
var LonCusts = fn(db, "London");
//3.查詢(xún)城市為Seattle的消費(fèi)者
var SeaCusts = fn(db, "Seattle");
Distinct
var q = (
??? from c in db.Customers
??? select c.City )
.Distinct();
?
| Where | 過(guò)濾;延遲 |
| Select | 選擇;延遲 |
| Distinct | 查詢(xún)不重復(fù)的結(jié)果集;延遲 |
| Count | 返回集合中的元素個(gè)數(shù),返回INT類(lèi)型;不延遲 |
| LongCount | 返回集合中的元素個(gè)數(shù),返回LONG類(lèi)型;不延遲 |
| Sum | 返回集合中數(shù)值類(lèi)型元素之和,集合應(yīng)為INT類(lèi)型集合;不延遲 |
| Min | 返回集合中元素的最小值;不延遲 |
| Max | 返回集合中元素的最大值;不延遲 |
| Average | 返回集合中的數(shù)值類(lèi)型元素的平均值。集合應(yīng)為數(shù)字類(lèi)型集合,其返回值類(lèi)型為double;不延遲 |
| Aggregate | 根據(jù)輸入的表達(dá)式獲取聚合值;不延遲 |
?
Join操作
Join操作分三種:
1.???? Join
from c in Orders
????join o in Customers on c.CustomerID equals o.CustomerID
????select new
????{
?????? c.CustomerID,
?????? o.ContactName
????}
2.?????? SelectMany(這是一對(duì)多,多對(duì)多)
一對(duì)多
Customers與Orders是一對(duì)多關(guān)系。即Orders在Customers類(lèi)中以EntitySet形式出現(xiàn)
from c in Customers
from o in c.Orders
select new
{
?? c.CustomerID,
?? o.OrderID
}
多對(duì)多
from c in Customers
from o in c.Orders
select new
{
?? c.CustomerID,
?? o.OrderID
}
用多對(duì)多的情況是:
一般有三個(gè)表,它們的關(guān)系是1:M:1
也就是說(shuō)中間那個(gè)表有外鍵,連接第一個(gè)和第三表中
自關(guān)聯(lián)關(guān)系:
var q =
??? from e1 in db.Employees
??? from e2 in e1.Employees
??? where e1.City == e2.City
??? select new {
??????? FirstName1 = e1.FirstName, LastName1 = e1.LastName,
??????? FirstName2 = e2.FirstName, LastName2 = e2.LastName,
??????? e1.City
??? };
?
3.?????? group join
var q =
??? from c in db.Customers
??? join o in db.Orders on c.CustomerID
??? equals o.CustomerID into orders
??? select new
??? {
??????? c.ContactName,
??????? OrderCount = orders.Count()
};
?
let語(yǔ)句是重命名。let位于第一個(gè)from和select語(yǔ)句之間。
var q =
??? from c in db.Customers
??? join o in db.Orders on c.CustomerID
??? equals o.CustomerID into ords
??? let z = c.City + c.Country
??? from o in ords
??? select new
??? {
??????? c.ContactName,
??????? o.OrderID,
??????? z
??? };
Composite Key(組合鍵)
var q =
??? from o in db.Orders
??? from p in db.Products
??? join d in db.OrderDetails
??????? on new
??????? {
??????????? o.OrderID,
??????????? p.ProductID
??????? } equals
??????????? new
??????????? {
??????????????? d.OrderID,
???????? ???????d.ProductID
??????????? }
??????? into details
??? from d in details
??? select new
??? {
??????? o.OrderID,
??????? p.ProductID,
??????? d.UnitPrice
??? };
說(shuō)明:使用三個(gè)表,并且用匿名類(lèi)來(lái)表示它們之間的關(guān)系。它們之間的關(guān)系不能用一個(gè)鍵描述清楚,所以用匿名類(lèi),來(lái)表示組合鍵。還有一種是兩個(gè)表之間是用組合鍵表示關(guān)系的,不需要使用匿名類(lèi)。
Order by
var q =
??? from o in db.Orders
??? where o.ShipCity == "London"
??? orderby o.Freight
??? select o;
轉(zhuǎn)載于:https://www.cnblogs.com/baixingfa/archive/2008/08/15/1269044.html
總結(jié)
以上是生活随笔為你收集整理的linq to sql实战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 庆祝开通博客成功!
- 下一篇: hibernate之关联关系(一对多)