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