Linq语句和方法 language IntegratedQuery 语言继承查询
主要包含三部分
1, LINQ to Object
2, LINQ to xml
3, LINQ to ADO.NET
扩展方法:
目的:对现有已存在的类提供额外的方法以增强该类的功能
注意事项:
1, 是一个特殊的静态方法
2, 拓展方法的优先级低于同名的类方法
3, 只在特定的命名空间下才有效
4, 除非必须不要滥用拓展方法
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private voidbutton1_Click(object sender, EventArgs e)
{
//LINQ体验
int[] arr = { 12,23,34,45,456,6,343,34};
//没有LINQ 我们做的方式
//ArrayList result = new ArrayList();
//for (int i = 0; i < arr.Length; i++)
//{
// if (arr[i] >50)
// {
// result.Add(arr[i]);
// }
//}
//for (int j=0; j < result.Count; j++)
//{
// Console.WriteLine(result[j]);
//}
//有了LINQ后我们可以这么做
//获取大于50的数
IEnumerable ie =arr.Select(p=>p).Where(p=>p>50);
IEnumerator result = ie.GetEnumerator();
while (result.MoveNext())
{
Console.WriteLine(result.Current);
}
}
private voidbutton2_Click(object sender, EventArgs e)
{
//拓展方法
string s = "asdflg";
Console.WriteLine(s.ToUpper());
Console.WriteLine(s.ToLower());
//如果我们需要将某一个字符串的首字母大写,其他字幕小写
Console.WriteLine(s.ToPascal());
Console.WriteLine(s.ToPascal(10));
}
}
//拓展类,只要是静态的就可以
public static class ExtraClass
{
//拓展方法--特殊的静态方法--为string类型添加特殊的方法ToPascal
//this: 标明给字符串类型添加额外的方法
public static string ToPascal(this string s)
{
return s.Substring(0, 1).ToUpper() +s.Substring(1).ToLower();
}
public static string ToPascal(this string s,int len)
{
return s.Substring(0, 1).ToUpper() +s.Substring(1,len).ToLower();
}
}
说白了 没有拓展方法就没有LINQ;
Lamda 是由.netframework 1.0 委托
2.0 匿名方法 由这两个过度而来
最基本的Lamda语法
(参数列表)=>{方法体}
Lamda 与匿名方法相似;但不同,匿名方法的参数必须是已定义的,而Lamdakeyi1yong1
推断类型的
是匿名方法和委托进化而来的
LINQ中基本查询语句
Public static IEnumerable<TResult>Select<TSource,TResult>(this IEnumerable<TSource>source,Func<TSource,TResult> selector)
说明:
1, Select 方法是一个泛型扩展方法
2, 它作用于IEnumerable<TSource>类型