学习语言集成查询-Linq之Lambda表达式学习笔记

学习语言集成查询--Linq之Lambda表达式学习笔记

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指定要分组的字段。

   初步学习,如有误还望指教!