首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

.NET中数据访问方式(一):LINQ

可查询类型 LINQ之所以能够使用相同的语法操作不同的数据源,是因为和LINQ直接打交道的是可查询类型而非数据源,在LINQ中,直接或间接实现了IEnumerableT>接口的类型称为可查询类型, ....NET中如:ListT>,Dictionary,数组(由CLR负责隐式实现IEnumerableT>接口)等,实现了IEnumerableT>接口。...LINQ查询特点: 延迟查询 若查询表达式的返回结果是IEnumerableT>类型,则在声明查询表达式时不会执行查询,而是在迭代查询变量时才进行查询。...立即查询 若查询表达式返回单个值或者使用了ToListT>、ToArrayT>等方法时会执行立即查询,因为这些操作会遍历数据。...工具推荐 LINQ Pad是一款轻量级的数据查询工具,在LINQ Pad中可以使用LINQ表达式、扩展方法、SQL语句等对数据库进行操作,简单易用功能强大。 ?

2.7K30

LINQ驱动数据的查询功能

DBScoreList.Average(t => t.Score));        使用LINQ中最简单的例子,说明LINQ给我们带来的便利。...命名空间都已实现 IEnumerableT>,一般来说在.NET内的所有集合对象都能使用LINQ进行处理,如果不引用System.Linq命名空间,所有Linq功能都无法使用。...2.3 类型推论       使用匿名类型在Linq中变量类型无法确定,如果试用IEnumerable就失去强类型的好处,在.NET3.5中只要使用Linq并且以select new来产生结果的查询...var的限制如下: (1)使用var类型赋值语句时右边不能为null,否则编译器无法推断其类型。 (2)var类型只能用于局部变量的声明,不能用于全局变量,类层变量或者是函数的返回值。...三、Linq语句       Linq语句主要应用于集合的处理上, 这就是Linq的价值所在,而对于外部数据源,只要有相应的LINQ provider就一样享有Linq的完整功能。

2.9K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    .NET深入解析LINQ框架(二:LINQ优雅的前奏)

    在使用IEnumerableT>和IQueryableT>之间的区别是什么?如何很好的理解这两者在LINQ的整个框架中的关系。...泛型的IEnumerableT>接口继承自IEnumerable接口,该接口表示可迭代的数据集合。Linq to object 也就是查询IEnumerableT>集合。...Enumerable静态类中的所有静态方法都是对应着操作IEnumerableT>集合类型的LINQ查询表达式的,当每次查询时都是直接的调用Enumerable里面的静态方法。...IQueryableT>接口,当我们使用LINQ来查询IQueryableT>接口时查询表达式会被直接编译成对应的Queryable静态类中的对应的静态扩展方法。...LINQ查询表达式最后是调用的链式查询方法,这些方法都是在静态类中定义好的,IEnumerableT>类型是直接的使用匿名方法调用执行,而IQueryableT>是使用人工解析的方式进行的,也就是自定义数据源

    2.1K30

    C#3.0新增功能07 查询表达式

    应用程序始终将源数据视为 IEnumerableT> 或 IQueryableT> 集合。 例如在 LINQ to XML 中,源数据显示为 IEnumerable。...还可以使用 into 关键字,使 join 或 group 子句的结果可以充当相同查询表达式中的其他查询子句的源。 查询变量 在 LINQ 中,查询变量是存储查询而不是查询结果的任何变量。...并且当 foreach 语句执行时,查询结果不会通过查询变量 scoreQuery 返回。 而是通过迭代变量 testScore 返回。...但是,还可以使用 var 关键字指示编译器在编译时推断查询变量(或任何其他局部变量)的类型。...在 LINQ 中,联接操作是对元素属于不同类型的对象序列执行。 联接了两个序列之后,必须使用 select 或 group 语句指定要存储在输出序列中的元素。

    2.1K10

    走进 LINQ 的世界

    支持 IEnumerableT> 或派生接口(如泛型 IQueryableT>)的类型称为可查询类型。   可查询类型不需要进行修改或特殊处理就可以用作 LINQ 数据源。...由于查询本身必须使用 foreach 以便返回结果,因此这些查询在执行时不使用显式 foreach 语句。另外还要注意,这些类型的查询返回单个值,而不是 IEnumerable 集合。...若要按相反顺序(从 Z 到 A)对结果进行排序,请使用 orderby…descending 子句。 2.4 分组:group   使用 group 子句,您可以按指定的键分组结果。...在使用 group 子句结束查询时,结果采用列表的列表形式。列表中的每个元素是一个具有 Key 成员及根据该键分组的元素列表的对象。...因为查询会返回 IEnumerable,所以您可通过将方法调用链接在一起,在方法语法中将这些查询组合起来。这就是在您通过使用查询语法编写查询时编译器在后台所执行的操作。

    4.6K30

    linq中order by 和group by (含lambda表达式实现)以及综合案例

    一、Linq应用场景 linq的语法通过System.Linq下面的Enumerable类提供支持,也就是说,只要是实现了IEnumerableT>的对象都可以使用Linq的语法来查询。...LINQ定义了大约40个查询操作符,如select、from、in、where、group by 以及order by,通过查看源代码,实际上linq为IEnumerable实现了一系列的扩展方法...group T by T.ZhiFuQuDao into g select g; 语句描述:Linq使用Group By 统计交易流水的支付渠道方式(支付宝或微信等等...}; 语句描述:Linq使用Group By和Max查找交易流水每种支付渠道的最高金额的一笔交易。...:Linq使用Group By按交易日期和交易渠名称将his对账单进行分组统计。

    3.6K40

    LINQ初步

    个人感觉这是LINQ最大的特点,除此之外,在LINQ中,查询成为编程语言的一个组成部分,这使得查询表达式可以得到很好地编译时语法检查,丰富的元数据,智能感知等强类型语言的好处。...查询表达式必须以form子句开头,以select或group子句结束。在这两个子句之间,可以使用where、orderby、join、let和其他from子句。...所有LINQ查询操作都由三个不同的操作组成: (1)获取数据源。 (2)创建查询。 (3)执行查询。 在上一个示例中,由于数据源是数组,因此它隐式支持泛型IEnumerableT>接口。...这一事实意味着该数据源可以用LINQ进行查询。查询在foreach语句中执行,因此,foreach需要IEnumerable或IEnumerableT>。...支持IEnumerableT>或派生接口的类型称为可查询类型。可查询类型不需要进行修改或特殊处理就可以用作LINQ数据源。

    1.7K20

    C#3.0新增功能09 LINQ 基础02 LINQ 查询简介

    这一事实意味着该数据源可以用 LINQ 进行查询。 查询在 foreach 语句中执行,且 foreach 需要 IEnumerable 或 IEnumerableT>。...支持 IEnumerableT> 或派生接口(如泛型 IQueryableT>)的类型称为可查询类型。 可查询类型不需要进行修改或特殊处理就可以用作 LINQ 数据源。...但基本规则很简单:LINQ 数据源是支持泛型 IEnumerableT> 接口或从中继承的接口的任意对象。...目前需要注意的是,在 LINQ 中,查询变量本身不执行任何操作并且不返回任何数据。 它只是存储在以后某个时刻执行查询时为生成结果而必需的信息。...由于查询本身必须使用 foreach 以便返回结果,因此这些查询在执行时不使用显式 foreach 语句。 另外还要注意,这些类型的查询返回单个值,而不是 IEnumerable 集合。

    3.5K30

    .NET中那些所谓的新语法之四:标准查询运算符与LINQ

    标准查询运算符是定义在System.Linq.Enumerable类中的50多个为IEnumerableT>准备的扩展方法,而LINQ则是一种类似于SQL风格的查询表达式,它们可以大大方便我们的日常开发工作...方法返回的仍然是一个IEnumerableT>的类型,仍然可以继续使用扩展方法。...在实际的开发中,我们往往会使用一些ORM框架例如EF去操作数据库,Where方法的使用则是每次调用都只是在后续生成SQL语句时增加一个查询条件,EF无法确定本次查询是否已经添加结束,所以没有办法木有办法在每个...Where方法执行的时候确定最终的SQL语句,只能返回一个DbQuery对象,当使用到这个DbQuery对象的时候,才会根据所有条件生成最终的SQL语句去查询数据库。     ...表达式以"from"开始,以"select 或 group by子句"结尾;   (2)LINQ表达式的输出是一个 IEnumerableT> 或 IQueryableT> 集合;(注:T 的类型

    2.1K30

    .net 温故知新:【6】Linq是什么

    每次使用委托的时候我们都要定义比较麻烦,所以框架已经为我们定义好了两个类型,Action和Func一个无返回值,一个有返回值,并且采用泛型定义了多个委托以满足我们日常使用。...Lambda 表达式可采用以下任意一种形式: 其中第一种后面写表达式,第二种是使用大括号{}的代码块作为主体,语句 lambda 与表达式 lambda 类似,只是语句括在大括号中。...this关键字修饰,然后predicate为一个输入参数是T返回时bool的委托用来进行对List里面的每一个元素进行筛选,返回的bool结果判断是否符合要求。...在IEnumerable扩展方法返回参数仍然是IEnumerable,所以可以像开始我们写的那样进行链式调用。...group t by t into t where t.Count() > 1 orderby t.Count() descending

    2.7K30

    C#进阶-LINQ表达式之多表查询(Join连接篇)

    本篇文章我们将演示LINQ扩展包基础语法里的多表查询 ,以Join连接查询为主要内容。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。...LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。.../*新建一个相等比较器CompareUser*//*当两个User对象的name和occupation属性相等时返回true,否则为false*/class CompareUser : IEqualityComparer...通过使用C#或VB.NET的语法,LINQ Join查询不仅简化了复杂的查询逻辑,还提高了代码的可读性和维护性。...LINQ的Join查询提供了一个非常强大且灵活的工具集,以处理多源数据的复杂关联和整合。正确使用这些工具不仅可以优化数据处理流程,还能显著提升数据查询的效率和质量。

    3.6K65

    编写高质量代码改善C#程序的157个建议

    本文主要学习记录以下内容:   建议29、区别LINQ查询中的IEnumerableT>和IQueryableT>   建议30、使用LINQ取代集合中的比较器和迭代器   建议31、在LINQ查询中避免不必要的迭代...针对LINQ to SQL时,则使用Queryable中的扩展方法,它接受的参数是Expression。Expression用于包装Func。...LINQ to SQL引擎最终会将表达式树转化成为相应的SQL语句,然后在数据库中执行。   那么到底什么时候使用IQueryableT>,什么时候使用IEnumerableT>呢?...,但是在整个LINQ查询语句的最后对结果使用了AsEnumerable方法,这相当于将远程数组转成了本地数据。...在使用IQueryableT>和IEnumerableT>的时候还需要注意一点,IEnumerableT>查询的逻辑可以直接用我们自己所定义的方法,IQueryableT>则不能使用自定义的方法

    96350

    LinQ 查询表达式

    操作方式使用了 LINQ,之前一直对 LINQ 的查询语法不太喜欢,这次使用之后,感觉比方法语法更容易接受,因此详细总结一下查询表达式的语法。 数据查询历来都表示为简单的字符串,没有编译时类型检查。...还可以使用 into 关键字,使 join 或 group 子句的结果可以充当相同查询表达式中的其他查询子句的源。 查询变量 在 LINQ 中,查询变量是存储查询而不是查询结果的任何变量。...group 子句 使用 group 子句可生成按指定键组织的组的序列。键可以是任何数据类型。...into 进行延续 可以在 select 或 group 子句中使用 into 关键字创建存储查询的临时标识符。...联接了两个序列之后,必须使用 select 或 group 语句指定要存储在输出序列中的元素,还可以使用匿名类型将每组关联元素中的属性合并到输出序列的新类型中。

    1.9K20

    C# 基础知识系列-7 Linq详解

    前言 在上一篇中简单介绍了Linq的入门级用法,这一篇尝试讲解一些更加深入的使用方法,与前一篇的结构不一样的地方是,这一篇我会先介绍Linq里的支持方法,然后以实际需求为引导,分别以方法链的形式和类SQL...前置概念介绍 PredicateT> 谓词、断言,等价于 FuncT,bool> 即返回bool的表达式 Expression 表达式树,这个类很关键,但是在这里会细说,我们会讲它的一个特殊的泛型类型...Group 分组,依照指定内容进行分组 Group的方法声明有很多种: 最常用的一种是: public static IEnumerableLinq.IGrouping使用OrderBy对数据源进行一次排序,使结果与原有顺序相反,然后使用First获取 当数据源为空,或者不存在满足条件的元素时,调用这组方法会报错。...以上是官方介绍,我在开发过程中并没有使用过这个方法,不过这个方法完全可以认为是Join和Group的组合体,即先进行了一次Join然后又对数据进行一次分组。

    2.4K50

    C#3.0新增功能09 LINQ 标准查询运算符 01 概述

    共有两组 LINQ 标准查询运算符,一组作用于类型 IEnumerableT> 的对象,另一组作用于类型 IQueryableT> 的对象。...这意味着可以使用静态方法语法或实例方法语法来调用它们。 此外,多个标准查询运算符方法作用于那些基于 IEnumerableT> 或 IQueryableT> 的类型外的类型。...这些方法(Cast(IEnumerable) 和 OfType(IEnumerable))均允许在 LINQ 模式中查询非参数化或非泛型集合。...返回序列的方法会延迟查询执行,并返回一个可枚举的对象。 对于在内存中集合上运行的方法(即扩展 IEnumerableT> 的那些方法),返回的可枚举对象将捕获传递到方法的参数。...在枚举该对象时,将使用查询运算符的逻辑,并返回查询结果。 与之相反,扩展 IQueryableT> 的方法不会实现任何查询行为,但会生成一个表示要执行的查询的表达式树。

    68820
    领券