[C#3.0體驗]Orcas中內建的LinQ,XLinQ[DLinQ]擴充套件方法
誰都知道LinQ是隨Orcas(VisualStudio2007)的.NET釋出的內建的一個擴充套件方法,其實整個名稱空間都是一個擴充套件方法的庫,它允許開發人員對任何資料型別進行查詢。大家都認為這是資料查詢的趨勢,也許以後的SQL語言會慢慢的發展,但我想現如今大家最想看到的是LinQ帶給我們的溫暖和快樂。微軟把這些擴充套件的方法放在System.Linq名稱空間下,當我們建立一個新型別時,你會發現預設的名稱空間中多了一個,在.NET2.0及以前的版本中都只有三個名稱空間,現在多了個System.Linq。LinQ定義了標準的查詢操作符擴充套件方法,可以為.NET開發人員用來輕鬆地查詢XML,關聯式資料庫,.NET 物件,和任何其他資料結構型別。Let’s go,下面讓我們慢慢體會LinQ帶給我們的快樂吧!(版本VSMar07CTP)
下面我們來看看LinQ分別對不同型別的資料進行查詢,但由於VSMar07CTP有一個BUG,我們再看下面的例子時首先要去掉這個BUG。在我檢視M$Connect時發現已經有人提交了這個BUG,就是web.config中編譯通不過,其實去掉那個很簡單,我們開啟web.config找到<compiler>節點,把子節點註釋掉,OK去掉了BUG後我們就可以正常的編譯除錯了,如下:
2 <compilers>
3 <compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
4
5 <!--<providerOption name="CompilerVersion" value="v3.5"/>
6 </compiler>-->
7 </compilers>
8 </system.codedom>
9
由於時間和我寫作的底限不長,所以我們先看看對.NET的物件和XML使用LinQ的擴充套件方法,至於資料庫讓我們在下一次中慢慢體會。我們首先新建一個類,由於能夠給出更直觀得效果我直接把圖給剪輯過來。但是對於在部落格上發表可不是一件很好的做法,程式碼如下:
在這裡.NET3.0中類的簡化就不多說了,我們可以不必寫隱藏變數了,像上面就可以定義一個實體類了。我們可以用.NET 3.0新的類初始化器和集合初始化器對其進行初始化,程式碼如下:
初始化時會給我們很爽的智慧提示,所以寫程式碼比DotNet2.0真的會少很多。
然後我可以使用由System.Linq提供的標準的“Where()”擴充套件方法來獲取這個集合中年齡為24的那些“Person”物件,程式碼如下:
LinQ擴充套件了很多方法,在智慧提示中就可以看到,此程式碼執行後返回:
Name:小宋; NickName:Sek;
Name:小孫; NickName:隨風隨雲;
下面是智慧提示的介面:
我們還可以體會很多新鮮的功能,但是在這裡就不再顯示其他的例子,下面我們來看看LinQ擴充套件方法在XML中的應用。其實我們也可以把它們應用於資料庫等資料檢索,我們首先來定義一個XML檔案,程式碼如下:
2 <people>
3 <person userID="1">
4 <name>小兵</name>
5 <nickName>網魂小兵</nickName>
6 <age>24</age>
7 </person>
8 <person userID="2">
9 <name>小賴</name>
10 <nickName>QQing</nickName>
11 <age>23</age>
12 </person>
13 </people>
14
對於XML的資料檢索有多種方法,在這裡我們看看怎樣用LinQ來檢索資料,要用到這個功能當然要引入名稱空間System.Xml.Linq(這也就是傳說中的XLinQ,順便提一下對於資料庫的為DLinQ位於System.Data.Linq名稱空間下)。[注:如果你找不到這兩個空間可以到%Windows%/Microsoft.Net/Framework目錄下的3.5裡直接引用DLL類庫。]
2 IEnumerable<XElement> person = people.Descendants("person")
3 .Where(p => p. Attribute ("userID").Value == "1");
4
以上程式碼它返回一個“XElement”元素序列,XElemen是沒有型別的XML節點元素。我們可以通過LINQ的 Select() 擴充套件方法來構造資料形狀,提供一個使用了新的物件初始化器句法的Lambda 表示式來填充同樣的“Person”類:
2
3 IEnumerable<Person> person = people.Descendants("person")
4 .Where(p => p.Attribute("userID").Value == "1")
5 .Select(p => new Person { UserID=Convert.ToInt32(p.Attribute("userID").Value),
6 Name=p.Element("name").Value,
7 NickName=p.Element("nickName").Value,
8 Age=Convert.ToInt32(p.Element("age").Value)
9 });
10
來源:http://www.cnblogs.com/xdotnet/archive/2007/04/12/oracas_getstarting_linqdlinqxlinq.html
相關文章
- Django內建許可權擴充套件案例Django套件
- 【LINQ技術】擴充套件特性和LINQ操作符套件
- Linq 下的擴充套件方法太少了,您期待的 MoreLinq 來啦套件
- eayui 驗證擴充套件UI套件
- C#中的this擴充套件方法與javascript中的prototype方法C#套件JavaScript
- .NET: 談談C#中的擴充套件方法C#套件
- Java 中模擬 C# 的擴充套件方法JavaC#套件
- Solon詳解(六)- Solon的校驗擴充套件框架使用與擴充套件套件框架
- Json擴充套件方法JSON套件
- Laravel 驗證擴充套件包Laravel套件
- jquery easyui 擴充套件驗證jQueryUI套件
- Linq查詢語法與擴充方法
- Java 缺失的特性:擴充套件方法Java套件
- 五、談擴充套件方法的理解套件
- shell中擴充套件命令套件
- 表單驗證使用擴充套件套件
- 再學Blazor——擴充套件方法Blazor套件
- C#.NET擴充套件方法C#套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- sql中的擴充套件學習SQL套件
- C# 擴充套件方法 借籤於 Objective-C 擴充套件類.C#套件Object
- 軟體可擴充套件性:來自星巴克的經驗套件
- C#3.0新體驗C#
- C#3.0/LINQ的新下載C#
- Flutter——Dart Extension擴充套件方法的使用FlutterDart套件
- [擴充套件推薦]簡體轉繁體/繁體轉簡體 OpenCC-PHP 擴充套件套件PHP
- STL中的棧的擴充套件 (轉)套件
- SOFABoot 擴充套件點初體驗 | SOFALab 實踐系列boot套件
- tonyenc加密擴充套件使用方法加密套件
- JavaScript String 物件擴充套件方法JavaScript物件套件
- CheckBoxList擴充套件方法程式碼套件
- 構建可擴充套件的有態服務套件
- 構建可擴充套件的應用(一) (轉)套件
- .NET Core中介軟體的註冊和管道的構建(3) ---- 使用Map/MapWhen擴充套件方法套件
- WCF擴充套件:行為擴充套件Behavior Extension套件
- redis的PHP擴充套件包安裝方法RedisPHP套件
- 查詢document及他的擴充套件模型裡的內容時需要多表查詢嗎?還是有內建的方法套件模型
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件