C# Ling to sql 之Union All/Union/Intersect操作
Union All/Union/Intersect操作
適用場景:對兩個集合的處理,例如追加、合併、取相同項、相交項等等。
Concat(連線)
說明:連線不同的集合,不會自動過濾相同項;延遲。
1.簡單形式:
varq = (fromcindb.Customersselectc.Phone ).Concat(fromcindb.Customersselectc.Fax ).Concat(fromeindb.Employeesselecte.HomePhone );
語句描述:返回所有消費者和僱員的電話和傳真。
2.複合形式:
varq = (fromcindb.Customersselect new{ Name = c.CompanyName, c.Phone } ).Concat(fromeindb.Employeesselect new{ Name = e.FirstName +" "+ e.LastName, Phone = e.HomePhone } );
語句描述:返回所有消費者和僱員的姓名和電話。
Union(合併)
說明:連線不同的集合,自動過濾相同項;延遲。即是將兩個集合進行合併操作,過濾相同的項。
varq = (fromcindb.Customersselectc.Country ).Union(fromeindb.Employeesselecte.Country );
語句描述:查詢顧客和職員所在的國家。
Intersect(相交)
說明:取相交項;延遲。即是獲取不同集合的相同項(交集)。即先遍歷第一個集合,找出所有唯一的元素,然後遍歷第二個集合,並將每個元素與前面找出的元素作對比,返回所有在兩個集合內都出現的元素。
varq = (fromcindb.Customersselectc.Country ).Intersect(fromeindb.Employeesselecte.Country );
語句描述:查詢顧客和職員同在的國家。
Except(與非)
說明:排除相交項;延遲。即是從某集合中刪除與另一個集合中相同的項。先遍歷第一個集合,找出所有唯一的元素,然後再遍歷第二個集合,返回第二個集合中所有未出現在前面所得元素集合中的元素。
varq = (fromcindb.Customersselectc.Country ).Except(fromeindb.Employeesselecte.Country );
語句描述:查詢顧客和職員不同的國家。
Top/Bottom操作
適用場景:適量的取出自己想要的資料,不是全部取出,這樣效能有所加強。
Take
說明:獲取集合的前n個元素;延遲。即只返回限定數量的結果集。
varq = (fromeindb.Employeesorderbye.HireDateselecte) .Take(5);
語句描述:查詢出最早5位僱用的僱員。
Skip
說明:跳過集合的前n個元素;延遲。即我們跳過給定的數目返回後面的結果集。
varq = (frompindb.Productsorderbyp.UnitPricedescending selectp) .Skip(10);
語句描述:查詢出第11個最貴產品後面的所有產品。
TakeWhile
說明:直到某一條件成立就停止獲取;延遲。即用其條件去依次判斷源序列中的元素,返回符合判斷條件的元素,該判斷操作將在返回false或源序列的末尾結束 。
SkipWhile
說明:直到某一條件成立就停止跳過;延遲。即用其條件去判斷源序列中的元素並且跳過第一個符合判斷條件的元素,一旦判斷返回false,接下來將不再進行判斷並返回剩下的所有元素。
Paging(分頁)操作
適用場景:結合Skip和Take就可實現對資料分頁操作。
varq = (fromcindb.Customersorderbyc.ContactNameselectc) .Skip(50) .Take(10);
語句描述:跳過前50條記錄,取出接下來的10條記錄,形成乘積表在第6頁顯示。
varq = (frompindb.Productswherep.ProductID > 50orderbyp.ProductIDselectp) .Take(10);
SqlMethods操作
在LINQ to SQL語句中,為我們提供了SqlMethods操作,進一步為我們提供了方便,例如Like方法用於自定義通配表示式,Equals用於相比較是否相等。
Like
自定義的通配表示式。%表示零長度或任意長度的字串;_表示一個字元;[]表示在某範圍區間的一個字元;[^]表示不在某範圍區間的一個字元。比如查詢消費者ID以“C”開頭的消費者。
varq =fromcindb.CustomerswhereSqlMethods.Like(c.CustomerID,"C%")selectc;
比如查詢消費者ID沒有“AXOXT”形式的消費者:
varq =fromcindb.Customerswhere!SqlMethods.Like(c.CustomerID,"A_O_T")selectc;
DateDiffDay
說明:在兩個變數之間比較。分別有:DateDiffDay、DateDiffHour、DateDiffMillisecond、DateDiffMinute、DateDiffMonth、DateDiffSecond、DateDiffYear
varq =fromoindb.OrderswhereSqlMethods.DateDiffDay(o.OrderDate, o.ShippedDate) < 10selecto;
語句描述:查詢所有10天之內的訂單。
轉載:https://www.cnblogs.com/xlhblogs/archive/2012/01/17/2324478.html