準備工作:
資料表:
table1
id int pk
col1 varchar(50)
col2 int
***********************************===
table2
id int pk
oid int fk
remarks varchar(50)
***********************************===
方法簡介:
1. 查詢
dbcontext dc = new dbcontext(); //例項化linq to sql 類
var s = from t1 in dc.table1
select t1;
s就是表table1中所有的集合
如果需要返回table1中的某幾列。
var s = from t1 in dc.table1
select new
;這樣就只返回id列和col1列。
如果要給返回的列指定別名,寫法如下:
var s = from t1 in dc.table1
select new
;這就相當於sql語句中的 select id as 『myid』, col1 as 『mycol1』 from table1。
2. 帶條件查詢
查詢table1中col1列的值等於 abc的所有記錄
dbcontext dc = new dbcontext();
var s = from t1 in dc.table1
where t1.col1==」abc」 //或者 where t1.col1.equals(「abc」);模糊查詢用where t1.col1. contains (「abc」) 相當於sql語句中的 like 『%abc%』
select t1;
還有一種更簡單的方法
var s = dc.table1.where(u=>u.col1.equals(「abc」));
在vs2008中,已經將所有容器(陣列)都封閉了如上方法。類似的還有
var s = dc.table1.first() //取第一條資料
var s = dc.table1.last() //取最後一條資料
但是這樣寫,必需注意異常處理。比如取第一條資料時,如果表table1中根本就沒有任何資料,則該語句會直接出錯。
所以要麼先判斷表中的資料條數,要麼加try…catch…進行處理。
3. 資料總數
dbcontent dc = new dbcontent();
var s = from t1 in dc.table1
select new
;s.count(); //這裡就是資料總條數
還有一種更簡單的方法。
int totailno = dc.table1.count(); //這裡的count()裡面同樣可以加條件(u=>u.col1.equals(「abc」))。
4. 兩表聯合查詢(及左鏈結)
dbcontent dc = new dbcontent();
var s = from t1 in dc.table1
join t2 in dc.table2
on t1.id equals t2.oid //注:用了join ,on後面必需用 equals
select new
;左鏈結
var s = from t1 in dc.table1
join t2 in dc.table2
on t1. id equals t2.oid into tempt
from t3 in tempt.defaultifempty()
select ……
linq中的左連線(或右連線)就是使用defaultifempty()語法。但是使用defaultifempty()也需要用到into語法。如上例所示。在語句執行過後,t2是已經不存在了,因為它已經將資料轉移到tempt中了;而tempt也不存在了,同樣是因為通過defaultifempty()語法將資料轉移到t3中了。
5. group by 語法
var result = from t in dc.table1
group t by t.id into tempt //這一步已經不存在 t 了 ,而 t 中的資料都到 tempt中了(資料是沒移動的)
select new
;在linq 中,使用group by ,就必需使用into(也就是將group by 以後的資料放到乙個新的容器中)。另外,值得注意的是,例子中的 objid= tempt.key。這裡也可以看出。是使用的tempt,而不是t,說明通過group by…into… 已經將查詢出來的結果放進了tempt中。而tempt.key就是 group by 後面的t.id。
6. 分頁
var s = from t1 in c.tbtests
order by t1.id //分頁都需要用到order by ,還將可能引起返回的資料不準確
select new
;gridview1.datasource = s.skip(startrowindex).take(rowcount);
gridview1.databind();
startrowindex:當前資料頁數的第一條資料
rowcount:每頁顯示的資料條數
比如:頁數用 pageindex表示。
當前是第一頁,(pageindex=0; startrowindex=0)
每頁顯示20條資料,(rowcount=20)
7. 多條件動態查詢
首先得寫乙個類(用於載入動態條件的)
///
/// 生成多條件動態查詢的條件結構 : and用true ; or用false
///
public static class predicateextensions
public static expression> false()
public static expression> or(this expression> expr1, expression> expr2)
public static expression> and(this expression> expr1, expression> expr2)
}上面這部分是乙個老外寫的,嘿嘿
下面進行動態查詢
var searchpredicate1 = predicateextensions.true();
string col1 = textbox1.text;
int col2 = int.prase(textbox2.text);
if (!string.isnullorempty(col1))
if(col2 != 0)
dbcontent dc = new dbcontent();
var s = from t1 in dc.table1.where(searchpredicate1)
select t1;
8. 查詢出來的資料再查詢
dbcontent dc = new dbcontent();
var s1 = from t1 in dc.table1
select t1;
var q = from t1 in dc.table2
join t2 in s1 //這裡是將查詢的資料 s 再進行查詢
on t1.oid equals t2.id
select ……
9. 外部資料作中條件檢索
int col2list = new int[5] ;
dbcontent dc = new dbcontent();
var s1 = from t1 in dc.table1.where(u=>col2list.contains(u.col2)) //查詢列col2的值包含在col2list中的資料(和 in 語法差不多)
select t1;
linq to sql 擴充套件方法
老趙的部落格 1 datacontext擴充套件方法public static class datacontextexentions 擴充套件executequery方法 public static listexecutequery this datacontext datacontext,ique...
Linq to sql 實體繼承的使用
定義好繼承的實體之後,我們就可以使用了。先是自定義乙個 datacontext吧 public partial class bbscontext datacontext 然後,我們來測試一下 linqto sql 是否能根據 topictype 識別派生類 bbscontext ctx new bb...
步步學LINQ to SQL 使用LINQ檢索資料
該系列教程描述了如何採用手動的方式對映你的物件類到資料表 而不是使用象sqlmetal這樣的自動化工具 以便能夠支援資料表之間的m m關係和使用實體類的資料繫結。即使你選擇使用了自動生成類的工具,理解這一實現過程可以讓你更加方便地對你的應用程式加以擴充套件。第一篇 步步學linq tosql 將類對...