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