什麼是linq to sql
linq to sql(或者叫
dlinq
)是linq
(.net
語言整合查詢)的一部分,全稱基於關係資料的
.net
語言整合查詢,用於以物件形式管理關係資料,並提供了豐富的查詢功能,它和
linq to xml
、linq to objects
、linq to dataset
、linq to entities
等組成了強大的
linq
。要學好
linq
查詢語法,就不得不先理解
c# 3.0
的一些新特性,下面一一簡單介紹。
隱含型別區域性變數
///隱含型別區域性變數var age = 26;
var username = "aehyok";
var userlist = new ;
console.writeline(string.format("姓名為年齡為",username,age));
foreach (var user in userlist)
純粹給懶人用的
var關鍵字,告訴編譯器(對於
clr來說,它是不會知道你是否使用了
var,苦力是編譯器出的),你自己推斷它的型別吧,我不管了。但是既然讓編譯器推斷型別就必須宣告的時候賦值,而且不能是
null
值。注意,這只能用於區域性變數,用於欄位是不可以的。
匿名型別
///匿名型別var data = new ;
console.writeline("username: age:", data.username, data.age);
匿名型別允許開發人員定義行內型別,無須顯式定義型別。常和
var配合使用,
var用於宣告匿名型別。定義乙個臨時的匿名型別在
linq
查詢句法中非常常見,我們可以很方便的實現物件的轉換和投影。
擴充套件方法
public static class helperpublic static bool in(this object o, ienumerable b)
return false;}}
///擴充套件方法
console.writeline(string.format("字串aaa空的", "aaa".isnullorempty() ? "是" : "不是"));
console.writeline("1".in(new ));
很多時候我們需要對
clr型別進行一些操作,苦於無法擴充套件
clr型別的方法,只能建立一些
helper
方法,或者生成子類。擴充套件方法使得這些需求得意實現,同時也是實現
linq
的基礎。定義擴充套件方法需要注意,只能在靜態類中定義並且是靜態方法,如果擴充套件方法名和原有方法名發生衝突,那麼擴充套件方法將失效。
自動屬性
public class personpublic int age
public person()
}///自動屬性
person p = new person();
console.writeline(p.username);
意義不是很大,純粹解決機械勞動。編譯器自動為你生成get、set操作以及字段,並且你不能使用欄位也不能自定義get、set操作,不過你可以分別定義get和set的訪問級別。
物件初始化器
public class persontestpublic int age
public override string tostring()
age:", this.username, this.age);}}
///物件初始化器
persontest pp = new persontest ;
console.writeline(pp.tostring());
console.readline();
編譯器會自動為你做setter操作,使得原本幾行的屬性賦值操作能在一行中完成。這裡需要注意:
允許只給一部分屬性賦值,包括internal訪問級別
可以結合建構函式一起使用,並且建構函式初始化先於物件初始化器執行
集合初始化器
繼續使用物件初始化的物件persontest
var persons = new list,new persontest };
foreach (var ps in persons)
console.writeline(ps.tostring());
編譯器會自動為你做集合插入操作。如果你為
hashtable
初始化的話就相當於使用了兩個物件初始化器。
lambda表示式
///lambda表示式var list = new ;
var result = array.findall(list, s => (s.indexof("a") > -1));
foreach (var v in result)
其實和2.0中的匿名方法差不多,都是用於產生內聯方法,只不過lambda表示式的語法更為簡潔。語法如下:
(引數列表) => 表示式或者語句塊
其中:引數個數:可以有多個引數,乙個引數,或者無引數。
表示式或者語句塊:這部分就是我們平常寫函式的實現部分(函式體)。
前面的示例分別是
1個引數的例子,下面結合擴充套件方法來乙個複雜的例子:
public static class lambdatest}public delegate int mydg(int a, int b);
///lambda表示式 擴充套件方法 委託
console.writeline(1.oper(2, (a, b) => a + b));
console.writeline(2.oper(1, (a, b) => a - b));
查詢句法
///查詢句法var personss = new list,
new persontest ,
new persontest ,
};var selectperson = from pss in personss
where pss.age >= 20
select pss.username.toupper();
foreach (var psss in selectperson)
查詢句法是使用標準的
linq
查詢運算子來表達查詢時乙個方便的宣告式簡化寫法。該句法能在**裡表達查詢時增進可讀性和簡潔性,讀起來容易,也容易讓人寫對。
visual studio
對查詢句法提供了完整的智慧型感應和編譯時檢查支援。編譯器在底層把查詢句法的表示式翻譯成明確的方法呼叫**,**通過新的擴充套件方法和
lambda
表示式語言特性來實現。上面的查詢句法等價於下面的**:
var selectperson = personss.where(p=>p.age>=20).select(p=>p.username.toupper());
總結linq
查詢句法可以實現
90%以上
t-sql
的功能(由於
t-sql
是基於二維表的,所以
linq
的查詢語法會比
t-sql
更簡單和靈活),但是由於智慧型感應的原因,
select
不能放在一開始就輸入。
一步一步學Linq to sql
一步一步學linq to sql 一 預備知識 一步一步學linq to sql 二 datacontext與實體 一步一步學linq to sql 三 增刪改 一步一步學linq to sql 四 查詢句法 一步一步學linq to sql 五 儲存過程 一步一步學linq to sql 六 特性...
一步一步學Linq to sql(一) 預備知識
從今天起將推出新手講堂,首先從linq開始詳細講解。一步一步學 linq to sql 一 預備知識 什麼是linq to sql linq to sql 或者叫dlinq 是linq net語言整合查詢 的一部分,全稱基於關係資料的 net 語言整合查詢,用於以物件形式管理關係資料,並提供了豐富的...
一步一步深入 Linq to SQL
本文不是一篇關於linq to sql的大百科,寫本文的目的是引導大家快速上手linq to sql。一 建立乙個資料庫test,新建一張表student,裡面有三個字段,分別是 id name address。二 在vs中新建乙個專案linqtosql 三 在專案中新增linq to sql類li...