LINQ,语言集成查询(Language Integrated query)是一项微软技术,新增一种自然查询的SQL语法到.NET Framework的编程语言中,目前可支持Visual Basic.Net以及C#语言。
主要包括以下三部分:LINQ to Objects主要负责对象的查询。
LINQ to XML主要负责XML的查询。
LINQ to ADO.NET主要要负责数据库的查询
LINQ to SQL
LINQ to DataSet
LINQ to Entities
LINQ要解决的问题:
面向对象鱼数据访问的结合;
编程语言中的数据类型与数据库中的数据类型行程两套体系;
SQL编码体验落后;
SQL和XML都有各自的查询语言,而面向对象没有自己的查询语言;
Lambda表达式语法
最基本的Lambda表达式语法如下:(参数列表)=>{方法体}
说明:参数列表中的参数类型可以是明确类型或者是推断类型;如果是推断类型,则参数的数据类型将由编译器根据上下文自动推断出来。
基本查询操作符-获取数据 Select()
public static IEnumerable<TResult> Select<TSource,TResult>(this IEnumerable<TSource> source,Func<TSource,TResult>selector)
ps:select方法本身是一个泛型扩展方法,它作用于IEnumerable<TSource>类型,只接受一个Func<TSource,TResult>,Func<TSource,TResult>是一个泛型委托,位于System名字控件下,System.Core.Dll中,在这里selector是一个提取器。
如:实体集合persons中有"zhang san","wang wu","zhaoliu"
//输出所有元素
var result = persons.Select(p= > p);
过滤数据 Where()
public static IEnumerable<TSource>Where<TSource>(this IEnumerable<TSource> source,Func<TSource,bool>predicate)
ps:where方法也是一个泛型扩展方法。它和Select()一样用于IEnumerable<TSource>类型,它只接受一个Func<TSource,bool>泛型委托参数,在这里predicate是一个判断条件。
//输出姓"zhang"的人
var result = persons.Where(p=>p.StartsWith("zhang"));
排序数据 OrderBy()
public static IOrderedEnumerable<TSource>OrderBy<TSource,TKey>(this IEnumerable<TSource> source,Func<TSource,TKey>key Selector)
ps:orderby也是一个泛型扩展方法,同select(),where()以及下面的GroupBy方法作用于IEnumerable<TSource>类型,只接受Func<TSource,TKey>类型参数,在这里KeySelector指定要排序的字段。如果想降序排列可以使用OrderByDescending方法。
如:
//排序
var result = persons,OrderBy(p = >p);
分组数据 GroupBy()
public static IEnumerable<IGrouping<TKey,TSource>>GroupBy<TSource,TKey>(this IEnumerable<TSource>source,Func<TSource,TKey>keySelector)
作用于IEnumerable<TSource>类型,它只接受一个Func<TSource,TKey>泛型委托参数,在这里keySelector指定要分组的字段。
初步学习,如有误还望指教!