(一)LINQ定义:
?LINQ(Language Integrated Query)即语句查询。LINQ主要包含三部分:LINQ to Object、LINQ TOXML和LINQ t to ADO.NET.
(二)LINQ初体验:
?拓展方法:目的对现有的类提供额外的方法增强该类的功能。
该类型的所有方法都可以使用这种方法。
我们都知道string类中有方法将字符串手写字母转化为大写字母(小写字母),我们用拓展方法-将字符串的首字母转化为大写字母的方法。
private void btnExtramethod_Click(object sender, EventArgs e) { //拓展方法----- string s = "asdhasdh"; Console.WriteLine(s.ToUpper()); Console.WriteLine(s.ToLower()); Console.WriteLine(s.ToPascal()); Console.WriteLine(s.ToPascal(2)); }
方法一: //将字符串的手写字母转化为大写字母的方法 public string ToPascal( string s) //this后带类型,表明该类型添加拓展方法 { return s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower(); }
方法二:定义一个静态类,在静态类中写:
方法二:定义一个静态类,在静态类中写 public static class ExtraClass { //拓展方法--特殊的静态方法--为string类型添加特殊的方法ToPascal public static string ToPascal(this string s) //this后带类型,表明该类型添加拓展方法 { return s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower(); } public static string ToPascal(this string s,int len) //this后带类型,表明该类型添加拓展方法 { return s.Substring(0, 1).ToUpper() + s.Substring(1,len).ToLower() + s.Substring(len + 1); } }
?拓展方法的缺点是:
1、拓展方法特定的命名空间内有效。
2、拓展方法的优先级低于同名的类方法。
?用LINQ的一个小Dome
我们写一段获取大于50的数,我们通常这样写:
int[] arr = { 123, 12, 3, 12, 15, 4, 5, 46, 47, 56, 176 }; //获取大于50的数 ArrayList result = new ArrayList(); for (int i = 0; i < arr.Length; i++) { if (arr[i] > 50) { result.Add(arr[i]); } } //打印reult就OK了 for (int i = 0; i < result.Count; i++) { Console.WriteLine(result); }
//获取到大于50的数 IEnumerable ie = arr.Select(p => p).Where(p => p > 50); //输出---改代码可以复用 IEnumerator result = ie.GetEnumerator(); while (result.MoveNext()) { Console.WriteLine(result.Current); }
?Lambda表达式是LINQ的基本语法。
?Lambda最基本的表达式如下:
(参数列表)=>{方法体}
说明:参数类表中的参数类型可以是明确类型或者是推断类型。
如果是推断类型,则参数的数据类型将由编译器根据上下文自动推断出来。
?Lambda表达式的由来:
Lambda表达式是有.net FrameWork1.0中委托的概念到2.0中的匿名方法过渡来的。
用.net FrameWork1.0中委托的概念:
定义一个委托:
public delegate string deleTransfer(string s);//注意方法签名
//Linbda 来源 //.netFramWork1.0委托。--函数指针 deleTransfer trans = new deleTransfer(ToPascal);//委托指向方法topascal Console.WriteLine(trans("asdhasdh"));
ToPascal()方法见上面代码中的ToPascal(this string s)代码
.net FrameWork2.0匿名方法代码:
//net framework 2.0匿名方法 deleTransfer trans = delegate(string s) { return s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower(); }; //与1.0不同的地方
Lambda的表达式:
//net framework 3.5匿名方法 deleTransfer trans = s => s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower(); Console.WriteLine(trans("ashadfh"));
我们可以从代码中看的出来,它在委托和匿名方法的基础上形成的Lambda语法。
Linq Lambda表达式可与查询操作符结合使用以代替委托。Linq Lambda表达式是创建委托实现的简略表达形式,并可用于匿名委托适用的所有场合。
原文地址:http://blog.csdn.net/qiumuxia0921/article/details/41448937