orderby的意義是按照指定順序排序,連續兩次orderby,後面乙個有可能會打亂前面乙個的排序順序,可能與預期不符。
要實現sql中的order by word,name類似效果; linq 有thenby可以緊接使用, thenby記住原本排序的值,然後再排其他值, 正因如此,thenby是針對iorderenumerable 進行呼叫的。
group join操作符常用於返回『主鍵物件-外來鍵物件集合』的查詢,例如『產品類別-此類別下所有的產品』的模式。
//查詢語法
var query =
from c in
db.categories
join p
indb.products on c.categoryid equals p.categoryid into r
select
new; //
方法語法
var q =db.categories
.groupjoin
( db.products,
c =>c.categoryid,
p =>p.categoryid,
(c, p) => new
);
這樣就可以結合 defaultifempty 理解 left outer join的linq寫法。
group join生成的sql接近於:
select categories.*, products.*from
categories
left
join products on categories.id =
products.cateid
order
bycategories.id //
group
join 有點類似於 left
join 資料膨脹的效果
linq2sql join語法預設得到的是inner join
model1container model = newmodel1container();
//內連線
var query = from s in
model.student
join c
inmodel.course on s.coursecno equals c.cno
where c.cno == 1
select
new };
foreach (var item in
query)
在sql profile裡面監控到與上面linq2sql 對應的sql是
select[t0].[coursecno]as
[classid
], [
t1].[
cname]as
[classname
], [
t0].[
sname]as
[name
], [
t0].[
sno]as[
id]from
[student]as
[t0]inner
join
[course]as
[t1]on
[t0].[coursecno]=
[t1].[cno
]where[t1
].[cno]=
@p0
linq2sql 左連線
model1container model =new model1container();
var query =
from s in
model.student
join c in model.course on s.coursecno equals c.cno into
gc
from gci in
gc.defaultifempty()
select
new
};//outer
join時必須將join後的表into到乙個新的變數gc中,然後要用gc.defaultifempty()表示外連線(沒有匹配的記錄欄位設為null)
foreach (
var item in
query)
// 上例中使用了defaultifempty操作符,它能夠為empty序列(注意是empty序列而不是null序列)返回乙個預設元素序列,defaultifempty使用了泛型中的default關鍵字。
gc.defaultifempty(new course ) //
設定為空時的預設值
與以上linq2sql對應的sql 是
select[t0].[coursecno]as
[classid
], [
t1].[
cname]as
[classname
], [
t0].[
sname]as
[name
], [
t0].[
sno]as[
id]from
[student]as
[t0]left
outer
join
[course]as
[t1]on
[t0].[coursecno]=
[t1].[cno
]
在日常linq實踐中,按照某種預期寫定的linq, 在執行檢索時某些元素會爆出異常,導致整個檢索失敗;如果我們能容忍某些元素的異常,繼續完成整個linq檢索,可以寫乙個擴充套件方法,忽略報錯元素。
usingsystem;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
enumerable
catch
//yield 返回列舉器指向的當前元素
if(next)
yield
return
enumerator.current;}}
}}
}
這個擴充套件方法的思路是 重寫foreach語法糖的預設邏輯:
能夠使用foreach語法的序列必定實現ienumerable介面,此處我們重寫了該介面的預設迭代器使用方式。
五一常規總結
其實這篇部落格本來是昨天五月一日寫的,奈何昨天晚上回家太晚,早把這事拋到九霄雲外去了,所以還是今天來總結五一之前的課吧。了解了相當於高階版的二分演算法,知道了原來二分也是要控制的這麼精密,二分法找答案,最小中求最大,或最大中求最小時,當然對未排序的要先排序 應用範圍 1,求值 2,引數間具有相關性時...
常規排序演算法總結
首先推薦乙個學習資料結構的優秀的視覺化 主要總結以下6種排序演算法,其中插入排序 選擇排序 歸併排序 快速排序。1.氣泡排序 bubble sort 和快速排序 quick sort 和隨機快速排序 random quick sort 博文待寫 2.插入排序 insertion sort 和希爾排序...
電腦常規操作總結
1.前提條件 區域網內 從一台電腦進行遠端登入另外一台電腦進行操作時,被登入的電腦必須設定登入密碼才能遠端登入成功,否則不能進行登入。當從一台電腦進行遠端登入另一台電腦時,另一台電腦可以設定多個使用者,然後在賦予其相應的許可權,就可以讓多台電腦同時使用不同的賬戶登入這一台電腦進行操作。以前做乙個專案...