Linq的简介和基础知识学习
學(xué)習(xí)LINQ之前,我們要知道LINQ是干什么,解決什么問題的,怎樣學(xué)習(xí)?
一、LINQ簡(jiǎn)介
1、什么是LINQ?
什么是LINQ?LINQ中文翻譯為語(yǔ)言集成查詢(Language Integrated Query),更通俗的講,它相當(dāng)于一個(gè)通用的數(shù)據(jù)查詢接口。LINQ最初由Anders hejlsberg構(gòu)思,2007年11月19日,
LINQ作為.NET FrameWork3.5的一部分正式發(fā)布,同時(shí)微軟也將LINQ集成到了Visual Studio 2008中,這一巨大的創(chuàng)新,實(shí)現(xiàn)了面向?qū)ο蠛蛿?shù)據(jù)訪問的互通有無(wú)。
2、LINQ主要解決什么問題?
我們知道在LINQ之前,面向?qū)ο蠛蛿?shù)據(jù)訪問這兩個(gè)領(lǐng)域是相互分裂的,編程語(yǔ)言中的數(shù)據(jù)類型,和數(shù)據(jù)庫(kù)中的數(shù)據(jù)類型也有一些出入,同時(shí)SQL和XML都有自己的查詢語(yǔ)言
而對(duì)象卻沒有自己的查詢語(yǔ)言,這些在很大程度上限制開發(fā)的效率,而LINQ的設(shè)計(jì)理念就是在不同類型的數(shù)據(jù)之間(關(guān)系數(shù)據(jù)、層次模型數(shù)據(jù)等)之間實(shí)現(xiàn)數(shù)據(jù)訪問的互通有無(wú),
為不同的數(shù)據(jù)類型提供統(tǒng)一的訪問接口。
3、學(xué)習(xí)LINQ需要做哪些基本準(zhǔn)備
在開始學(xué)習(xí)LINQ之前,我們需要先來(lái)了解下理解C# 3.0的一些新特性:隱含類型局部變量、自動(dòng)屬性、對(duì)象初始化器、集合初始化器、匿名類型、Lambda表達(dá)式、
擴(kuò)展方法、局部方法、yield和IEnumerable接口、查詢語(yǔ)法等
二、LINQ查詢分類
1、Linq to Objects
主要負(fù)責(zé)對(duì)象查詢
2、Linq to XML
主要負(fù)責(zé)XML查詢
3、LInq to ADO.Net
主要負(fù)責(zé)數(shù)據(jù)庫(kù)查詢,Linq to ado.Net 又分為L(zhǎng)inq to Sql(語(yǔ)法查詢),Linq to DataSet(數(shù)據(jù)查詢),Linq to Entity(實(shí)體查詢)
三、基礎(chǔ)知識(shí)的學(xué)習(xí)
1、隱含類型局部變量
隱含類型var, 我們都知道Javascript是一種弱類型的語(yǔ)言,所以在運(yùn)行的時(shí)候才會(huì)更加的靈活。我們現(xiàn)在所接觸的語(yǔ)言大部分都是強(qiáng)類型的語(yǔ)言,
所謂強(qiáng)類型的語(yǔ)言,就是程序聲明的變量、實(shí)例化對(duì)象,必須有明確的類型規(guī)定,這樣在編譯的時(shí)候就為其分配一定的內(nèi)存空間,這樣的話代碼的
的安全性就比較高,為了提高程序的運(yùn)行效率和靈活性,微軟也把var給引進(jìn)了進(jìn)來(lái)
static void Main(string[] args){#region 隱含類型變量var用法//定義 string var name = "張曉峰";//定義 intvar age = 26;//定義 string[]var peoples = new[] { "張三", "李四", "王五" };//輸出保存的值Console.WriteLine("名字:"+name);Console.WriteLine("年齡:" + age);foreach (var p in peoples) {Console.WriteLine("姓名:"+ p);}#endregion//保證控制臺(tái)不一閃而過 Console.ReadLine();}輸出結(jié)果:
編譯器可以自動(dòng)識(shí)別隱含類型的局部變量,但是前提是變量必須有值,但是在使用null之前,必須要確定類型,例如:var test=(string)null;
這樣編譯器可以自動(dòng)的推斷值類型,如果單純的為test=null,則編譯器無(wú)法識(shí)別其類型。
2、自動(dòng)屬性
以前定義一個(gè)類中屬性和方法需這樣寫
public class People{private string name;private string sex;private int age;public string Name {get { return name; }set { name = value; }}public string Sex {get { return sex; }set { sex = value; }}public int Age {get { return age; }set { age = value; }}}使用自動(dòng)屬性后,可以這樣寫,效果是同樣的
public class People{public string Name { get; set; }public string Sex { get; set; }public int Age { get; set; }}3、對(duì)象初始化器
對(duì)象初始化器C#3.0之前和之后語(yǔ)法對(duì)比
static void Main(string[] args){#region 對(duì)象初始化器的使用//C#3.0之前的用法People p1 = new People();p1.Name = "張三";p1.Sex = "男";p1.Age = 27;//C#3.0之后用法People p2 = new People() { Name = "李四", Sex = "女", Age = 18 };//輸出信息Console.WriteLine("人員信息:");Console.WriteLine("姓名:"+p1.Name+",性別:"+p1.Sex+",年齡:"+p1.Age);Console.WriteLine("姓名:" + p2.Name + ",性別:" + p2.Sex + ",年齡:" + p2.Age);#endregion//保證控制臺(tái)不一閃而過 Console.ReadLine();}輸出結(jié)果:
4、集合初始化器
集合初始化器C#3.0之前和之后寫法比較
static void Main(string[] args){#region 集合對(duì)象初始化器的使用//C#3.0之前的用法List<People> peoples = new List<People>();People p1 = new People();p1.Name = "張三";p1.Sex = "男";p1.Age = 27;People p2 = new People();p2.Name = "李四";p2.Sex = "女";p2.Age = 18;peoples.Add(p1);peoples.Add(p2);//輸出人員信息Console.WriteLine("人員信息如下:");foreach (People p in peoples){Console.WriteLine("姓名:" + p.Name + ",性別:" + p.Sex + ",年齡:" + p.Age);}//C#3.0之后用法 List<People> people1s = new List<People>() {new People() { Name="王五",Sex="男",Age=27},new People() { Name="趙六",Sex="女",Age=18}};//輸出人員信息Console.WriteLine("\n人員信息如下:");foreach (People p in people1s){Console.WriteLine("姓名:" + p.Name + ",性別:" + p.Sex + ",年齡:" + p.Age);}#endregion//保證控制臺(tái)不一閃而過 Console.ReadLine();}輸出結(jié)果:
5、匿名類型
和隱含類型的局部變量一樣,匿名類型就是開發(fā)者自定義類型,無(wú)須顯示定義。在LINQ中匿名類會(huì)常常用到。
使用方法如下:
?
static void Main(string[] args){#region 匿名類型使用var name = "瑪麗";var sex = "女";var age = 21;//匿名類型(實(shí)體類)var people = new{ Name = name, Sex = sex, Age = age};//輸出信息Console.WriteLine("姓名:" + people.Name + ",性別:" + people.Sex + ",年齡:" + people.Age);#endregion//保證控制臺(tái)不一閃而過 Console.ReadLine();}輸出結(jié)果:
6、Lambea表達(dá)式
Lambda表達(dá)式是由委托-->匿名函數(shù)-->Lambda表達(dá)式一步步過度而來(lái)的
7、擴(kuò)展方法
擴(kuò)展方法多用于對(duì)CLR類型一些操作的擴(kuò)展,在3.0之前如果要實(shí)現(xiàn)這些操作,一般都是建
一下輔助類,擴(kuò)展方法能方便的實(shí)現(xiàn)這些公共。
7.1、定義擴(kuò)展方法需要注意的地方:
1)擴(kuò)展方法只能只在靜態(tài)類中定義并且是靜態(tài)方法,
2)擴(kuò)展方法不能與原有方法名沖突,否則將無(wú)效
3)擴(kuò)展方法的參數(shù)必須為(this擴(kuò)展類的類實(shí)例,Parameter p)7.2、例子實(shí)例
class Program{static void Main(string[] args){Console.WriteLine("LiSha".ShowLove());Console.ReadLine();}}#region string的擴(kuò)展類public static class ExensionString {public static string ShowLove(this string s) {return "I Love," + s;}}#endregion結(jié)果如下:
?
8、局部方法
談到局部方法,首先要說(shuō)一下局部類,局部類是用partial修飾的類,可以由多個(gè)partial修飾的同名類組合成一個(gè)類,局部方法是3.0以后加入的特性,局部方法必須定義在局部類中,但是局部方法的定義和實(shí)現(xiàn)可以分開。在這里同時(shí)要注意,局部方法的返回值必須是靜態(tài)的,返回值必須是void,可以有參也可以無(wú)參,有無(wú)方法實(shí)現(xiàn)均可。
9、yieId
10、IEnumerable接口
?
Ps:
學(xué)習(xí)網(wǎng)址:http://blog.csdn.net/xuemoyao/article/details/8047513
?
轉(zhuǎn)載于:https://www.cnblogs.com/xielong/p/6814396.html
總結(jié)
以上是生活随笔為你收集整理的Linq的简介和基础知识学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入了解UIAutomation 的AP
- 下一篇: 【甘道夫】Hadoop2.2.0 NN