一步一步學Linq to sql 一 預備知識

2022-01-11 11:18:46 字數 3929 閱讀 5907

什麼是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 helper

public 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 person

public int age

public person()

}///自動屬性

person p = new person();

console.writeline(p.username);

意義不是很大,純粹解決機械勞動。編譯器自動為你生成get、set操作以及字段,並且你不能使用欄位也不能自定義get、set操作,不過你可以分別定義get和set的訪問級別。

物件初始化器

public class persontest

public 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...