zoukankan      html  css  js  c++  java
  • Linq持续学习中

    1.LINQ(Language Integrated Query)即语言集成查询。LINQ是一组语言特性和API,使得你可以使用统一的方式编写各种查询。用于保存和检索来自不同数据源的数据,从而消除了编程语言和数据库之间的不匹配,以及为不同类型的数据源提供单个查询接口。LINQ总是使用对象,因此你可以使用相同的查询语法来查询和转换XML、对象集合、SQL数据库ADO.NET数据集以及任何其他可用的LINQ提供程序格式的数据。LINQ主要包含以下三部分:主要负责对象的查询;XML的查询;数据库的查询。 
    在.NET类库中,LINQ相关类库都在System.Linq命名空间下,该命名空间提供支持使用LINQ进行查询的类和接口,其中最主要的是以下两个类和两个接口。 
    IEnumerable接口:它表示可以查询的数据集合,一个查询通常是逐个对集合中的元素进行筛选操作,返回一个新的IEnumerable接口,用来保存查询结果。 
    IQueryable接口:他继承IEnumerable接口,表示一个可以查询的表达式目录树。 
    Enumerable类:它通过对IEnumerable提供扩展方法,实现LINQ标准查询运算符。包括过路、导航、排序、查询、联接、求和、求最大值、求最小值等操作。 
    Queryable类:它通过对IQueryable提供扩展方法,实现LINQ标准查询运算符。包括过路、导航、排序、查询、联接、求和、求最大值、求最小值等操作。

     Enumerable和Queryable的区别:

    1)使用场合不同:Enumerable适合在内存数据集合中使用(如数组、List等),Queryable适合在离线数据集合中使用(如EF中的dbContext中的DbSet中使用) 

    2)返回类型不同:VS会根据你使用的数据集合的类型来自动使用相应命名空间下的方法,这是因为VS选择了最优的使用。当返回数据集合如Where方法时,Enumerable的Where返回的IEnumerable<>,Queryable的Where返回的是IQueryable<>,这两个集合有什么区别呢?IEnumerable<>是本地集合存在内存中,而IQueryable<>属于离线集合,在使用到返回的集合IQueryable<>才加载数据,属于延迟加载。

    3)参数不同:Enumerable需要的参数是委托类型Func<>,Queryable需要的参数类型是数据结构

    Expression<Func<User, bool>> expression = u => u.Id > 0;

    Func<int, bool> expression2 = u => u> 0;

    IEnumerable<int> x2 = x.Where(expression2);

    IQueryable<User> userSet = db.UserSet.Where(expression);

    2.LINQ的优势

    (1)熟悉的语言:开发人员不必为每种类型的数据源或数据格式学习新的语言。

    (2)更少的编码:相比较传统的方式,LINQ减少了要编写的代码量。

    (3)可读性强:LINQ增加了代码的可读性,因此其他开发人员可以很轻松地理解和维护。

    (4)标准化的查询方式:可以使用相同的LINQ语法查询多个数据源。

    (5)类型检查:程序会在编译的时候提供类型检查。

    (6)智能感知提示:LINQ为通用集合提供智能感知提示。

    (7)整形数据:LINQ可以检索不同形状的数据。CLR本身并不理解查询表达式语法,它只理解方法语法。编译器负责在编译时将查询表达式语法翻译为方法语法。

    1)查询表达式语法

    例子:var result = from p in ints where p % 2 != 0 select p;

    2)方法语法:主要利用System.Linq.Enumerable类中定义的扩展方法和Lambda表达式方式进行查询,类似于如何调用任何类的扩展方法。

       例子:var result = ints.Where(p => p % 2 == 0).ToArray();

    4. Linq基础语法

    1)where查询

    2)简单的函数计算(count,min,max,sum)

    3)排序

    4)top查询,take为查询多少条数据,注意:

    First()返回结果集中第一个匹配的元素,如果找不到会发生异常;

    FirstOrDefault()返回结果集中第一个匹配的,如果找不到会返回空。

    5)跳过前面多少条数据取余下的数据

    6)分页查询

    7)包含,类似like '%%'

    8)group by

    9)连接查询

     10)select和selectmany的区别

    Select() 如何返回一个与源集合具有相同元素数目的集合。

    SelectMany() 如何将中间数组序列串联为一个最终结果值,其中包含每个中间数组中的每个值。

  • 相关阅读:
    WCF相关
    MiniUI级联
    大家一起来学 NHibernate+NUnit (VS2012+SQL Server2008)
    C# 复杂算法
    sql自定义日期函数,返回范围内日期和星期数表。
    RDLC开发笔记
    解决IE7和IE6不支持javaScript中的indexOf函数的问题
    Sql获取周、月、年的首尾时间。
    Sql Server中实现Mysql中的group_concat函数效果
    RDLC隔行变色的实现
  • 原文地址:https://www.cnblogs.com/qqvvn/p/9574945.html
Copyright © 2011-2022 走看看