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

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

在编程语言层次,LINQ对于不同的数据源提供了相同的查询语法,方便了程序员操作不同的数据源。...可查询类型 LINQ之所以能够使用相同的语法操作不同的数据源,是因为和LINQ直接打交道的是可查询类型而非数据源,在LINQ中,直接或间接实现了IEnumerable接口的类型称为可查询类型, ....LINQ操作及一些扩展操作(如:LINQ to XML),不同的LINQ提供程序对于一些相同名称的扩展方法会提供不同的实现方式。....扩展方法(又称为标准查询) System.Linq.Enumerable类和System.Linq.Queryable类,分别针对IEnumerable和IQueryable接口进行的扩展。...转载必须保留文章的完整性,且在页面明显位置处标明原文链接。 如有问题, 请发送邮件和作者联系。

2.7K30

字符串插值_让我们帮助QueryProvider处理插值字符串

最痛苦的事情是在打开ClientEvaluation (客户端计算例外)之后修复错误,因为应该严格分析所有Automapper配置文件的插值。 让我们找出是什么,然后提出解决问题的方案。    ...these cases with the well known ToString(), processed like this:   我们可以得出结论,根本就没有教导提供者如何处理这些情况,但是可以教导它如何将这些情况与众所周知的...,它来自使用一个要获取IQueryable / IEnumerable的类处理所有通用接口并使用通用接口方法进行处理的需要。    ...我们可以通过将T引入基类(通过协方差)来避免这种情况,但是它对接口方法设置了一些限制。    ...结果 (Result)   Apply ReWrite to the linq expression on the top of the article:   将ReWrite应用于文章顶部的linq表达式

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

    ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构

    如果将任意部分声明为密封的,则整个类型都被视为密封的。如果任意部分声明基类型,则整个类型都将继承该类。 指定基类的所有部分必须一致,但忽略基类的部分仍继承该基类型。...各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口。在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用。最终类型是所有部分在编译时的组合。...其中不同之处只有SysSample模型 好在.net提供索引访问对象的强类型List这里的T代表SysSamle。...配置第五行的inputFile为上面所描述,可能因为环境不同你们EF路径有所不同。保存后TT模版会自动生成 tt模版如果没有高亮显示的。要安装一些工具。因为我是一边改一边发文章的。...也许在以后业务层也有必要的重构! 最后我完全修改了我项目的DAL层。用数据直接说话 ? ? 整整少了两万行。却完成了相同的功能。(代码类型.cs,与事实可能有点差别,但是可以效果明显) 代码参考下载。

    1.9K60

    Entity Framework 的一些性能建议

    所以每次我写LINQ查询,都会使用SQL Profiler看一下实际生成的SQL语句,以便发现潜在的性能问题。也强烈建议大家这么去做,以免日后软件大了出了问题很难查。 ?...大部分时候这两个接口在使用上的表现都是一致的,但如果你要做的是一个不确定的查询,意思是这个查询表达式不是一次性确定的,对于它的结果可能由别的类来选择到底select哪些东西,这时候就要用IQueryable...,而这些调用者希望得到的结果都各不相同。...所以文章一开始我就建议大家多用SQL Profiler看看自己的LINQ是怎么执行的。 如果把返回类型换成IQueryable,那么你的where语句就可以转化为SQL执行。...C#里的Count有两种。Enumerable.Count()是方法,List.Count是属性。一旦一个东西变成了List,你再去Count,就必定是在内存里进行的了。

    1.7K30

    C#规范整理·集合和Linq

    T>作为自定义集合类的基类# 如果要实现一个自定义的集合类,不应该以一个FCL集合类为基类,而应该扩展相应的泛型接口。...FCL集合类应该以组合的形式包含至自定义的集合类,需扩展的泛型接口通常是IEnumer-able<T>和ICollection<T>(或ICollection<T>的子接口,如IList<T>),前者规范了集合类的迭代功能...13.区别LINQ查询中的IEnumerable<T>和IQueryable<T># LINQ查询方法一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了...设计两套接口的原因正是为了区别对待LINQ to OBJECTS、LINQ to SQL,两者对于查询的处理在内部使用的是完全不同的机制。...在使用IQueryable<T>查询的时候,如果使用自定义的方法,则会抛出异常。 13.使用LINQ取代集合中的比较器和迭代器# LINQ提供了类似于SQL的语法来实现遍历、筛选与投影集合的功能。

    22930

    .NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

    ,看似不同的方法位于不同的地方,其实他们来自一个地方,所在的逻辑对象是一个,但是这恰恰会造成我们分析问题的瓶颈,这里我们重点的讲解一下扩展方法所扩展对象。...其实这有点像是把大问题分解成多个小问题来解决,但是又不全是为了分解问题而这样设计,在链式查询中很多关键字在不同的查询上下文中都是公用的,比如where可以用在查询,也可以用在更新、删除。...这里讨论的问题可能已经超过LINQ,但是很有意义,因为他们有着相似的设计模型。...根据3.2图中的意思,我们都已经知道扩展方法之间传输的对象都是来自不同的实例但是来自一个对象类型,那么为什么要分段执行每个关键字的操作呢?我们还是用图来帮助我们分析问题吧。 ?...方法的返回类型也是IQueryable类型,返回类型和扩展类型相同就已经构成链式编程的最小环路。

    1.5K11

    【深入浅出C#】章节 9: C#高级主题:LINQ查询和表达式

    可以在代码中进行更细粒度的操作控制,适用于灵活的操作序列。 操作更加灵活,可以根据需求组合不同的方法调用。 支持的操作更丰富,因为可以调用LINQ扩展方法。...IQueryable:这代表了一个可查询的数据源,通常用于与数据库查询交互。它支持延迟加载,这意味着查询不会立即执行,而是在需要结果时才会被执行,从而优化查询性能。...四、LINQ查询操作和结果 4.1 如何构建和组合多个LINQ查询操作符 构建和组合多个LINQ查询操作符是通过链式调用操作符的方式来实现的。...以下是一些优化 LINQ 查询性能的建议: 选择适当的数据源: 选择最适合你查询需求的数据源,如 List、IEnumerable、IQueryable 等。...IQueryable 允许将查询延迟到数据库服务器,以提高效率。 使用合适的查询操作符: 选择适合问题的查询操作符,避免使用不必要的操作符,以减少不必要的开销。

    2.3K61

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

    建议29、区别LINQ查询中的IEnumerable和IQueryable   LINQ查询方法一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:     Enumerable...Queryable类,它针对继承了IQueryable接口的集合类进行扩展。...设计Enumerable和Queryable两套接口的原因是为了区别对待LINQ to OBJECTS、LINQ to SQL,两者对于查询的处理在内部使用的是完全不同的机制。...那么有没有一种方法,即使类型只存在自动实现的属性,也能满足多方面的排序要求呢?答案是使用LINQ。LINQ提供了类似于SQL的语法来实现遍历、筛选与投影集合的功能。借助于LINQ的强大功能。  ...在命名空间System.Linq下存在很多静态类,这些静态类存在的意义就是FCL的泛型集合提供扩展方法。

    96350

    最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary

    Collection(集合) Collection是数据记录集合, 编写代码过程中,常常需要合适的容器保存临时数据,方便修改和查找,如何选取合适的数据容器,关键在于将执行的数据操作以及数据记录是否大量。...ArrayList 不是强类型,ArrayList中不同元素类型可以不相同,并且需要在运行时根据实际的输入来确定元素类型。因此在运行时消耗内存较多。 3....因此操作栈中的数据,需要先将数据push 到栈的顶部,需要删除元素必须变成栈顶部,即要遵守后进先出(LIFO)的原则。 栈与哈希表一样既不是强类型也不限制元素个数。 ?...1: System.Collections.Generic.IList strIList = new List(); 我们一起了解一下具体的类和接口之间的区别。...IQueryable与IEnumberable不同的是,当从服务器端加载过量的数据,IQueryable会自动减少应用负载。

    2K80

    .NET面试题系列 - LINQ to SQL与IQueryable

    名言警句 "理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。" - Jon Skeet LINQ to Object和LINQ to SQL有何区别?...LINQ to Object的数据源总是实现IEnumerable(所以不如叫做LINQ to IEnumerable),相对的,LINQ to SQL的数据源总是实现IQueryable类是自己写ORM必不可少的,有时也通称为ExpressionVisitor类。...不过,我在这里就仅以此为例,解释下如何扩展并为表达式树解析增加更多的功能,使之可以应付更多类型的表达式。 IQueryable与 IEnumerable的异同?...以相同的语法操作各种不同的数据库(例如oracle, SQL server等) 与经典的DataReader相比,当数据表的某栏的数据类型发生改变时,DataReader就会发生错误(传统的方式是使用DataReader.Read

    1.7K10

    .NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

    其实理解这些所谓的设计模型后将大大开阔我们的眼界,毕竟研究框架是要研究它的设计原理,它的存在必然是为了解决某一类问题,问题驱动它的设计模型。...其实环路执行、碎片化、假递归式都是问题的不同角度的称呼,就好比我们经常会用依赖倒置、控制反转、依赖注入这些词汇去形容设计原则、设计方法一样,他们都是为了解决某种问题而存在,通过巧妙的设计来达到很完美的效果...(当然我们这里讨论是LINQ背后的设计原理不单单针对LINQ的技术,而是某一类问题的通用设计模式。)...在LINQ中的查询表达式与查询方法其实是一一对应的,扩展方法是纵向的概念,而LINQ查询表达式是横向的,其实两者属于对应关系。...5】.IQueryable与IQueryProvider一对一的关系能否改成一对多的关系 IQueryable对象都有一个配套的IQueryProvider对象,在频繁的创建IQueryable的时候都会重新创建

    1.1K30

    由浅入深表达式树(二)遍历表达式树

    表达式树主要是由不同类型的表达式构成的,而在上文中我们也列出了比较常用的几种表达式类型,由于它本身结构的特点所以用代码写起来然免有一点繁琐,当然我们也不一定要从头到尾完全自己去写,只有我们理解它了,我们才能更好的去使用它...,ParameterExpression, BinaryExpression等, 这也是表达式灵活的地方, 因为归根结底它们都是继承自Expression, 而基本上我们用到的地方都是以基类作为参数类型接受的...接下来的问题是,这个类如何去翻译这个表达式树呢?我们的ExpressionVisitor要全场了!...我的目地的希望通过这个例子让大家更好的理解表达式树的遍历问题,这样我们就可以实现我们自己的LinqProvider了,请大家关注,我们来整个Linq To 什么呢?有好点子么?.../b/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx

    1.2K50

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

    中的集运算是指根据相同或不同集合(或集)中是否存在等效元素来生成结果集的查询运算。...因此,总体结果是一个与源集合具有相同元素数目的集合。 与之相反,SelectMany() 生成单个总体结果,其中包含来自每个源值的串联子集合。...下图描述 Select() 如何返回一个与源集合具有相同元素数目的集合。 ? 下图描述 SelectMany() 如何将中间数组序列串联为一个最终结果值,其中包含每个中间数组中的每个值。 ?...Enumerable.TakeWhileQueryable.TakeWhile 07 联接运算 联接两个数据源就是将一个数据源中的对象与另一个数据源中具有相同公共属性的对象相关联。...(C#) 匿名类型 构建联接和叉积查询 join 子句 如何:使用组合键进行联接 如何:联接不同文件的内容 (LINQ) (C#) 如何:对 join 子句的结果进行排序 如何:执行自定义联接操作 如何

    9.7K20

    C#的扩展方法解析

    继承的有关特性的使用所带来的问题:对象的继承关系实在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。...当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写它或被其他更适合的类替换,这种依赖关系限制了灵活性并最终限制了复用性。...如果同一个命名空间中的两个类含有扩展类型相同的方法,就没有办法做到只用其中一个类中的扩展方法。...{ /// /// 获取与 Linq.IQueryable"/> 的实例关联的表达式目录树。.../// /// /// /// 与 Linq.IQueryable"/> 的此实例关联的 <see

    2K70

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

    在LINQ里面充斥着大量的扩展方法,在这些扩展方法的后背其实是隐藏着一个很大的设计秘密,那就是链式编程模型,下面我们将通过详细的学习链式编程模式来理解LINQ为什么能连贯的使用相同的方法而显现的如此优雅...2.2.托管语言构造的基础(LINQ依附通用接口与查询操作符对应的方法对接) LINQ是统一的数据查询接口,那么它如何做到与不同的数据源直接衔接的?...另外一类LINQ支持的查询对象便是我们自定的数据源了,这类数据源的查询链式方法是由System.Linq.Queryable类提供的,如果我们使用LINQ查询表达式来查询System.Linq.IQueryable...细看System.Linq.Queryable静态类中的所有扩展方法与System.Linq.Enumerable类中的扩展方法的区别便是所有的Func类型都被System.Linq.Expressions.Expression...IQueryable接口,当我们使用LINQ来查询IQueryable接口时查询表达式会被直接编译成对应的Queryable静态类中的对应的静态扩展方法。

    2.1K30

    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①

    首先我们创建一个用户类AccountModel放在App.Models下的Sys文件夹下 using System; using System.Collections.Generic; using System.Linq...,主要记录管理员的增、删、改等操作的成功与失败的异常记录 日志插件有著名的log4net,可以输出多种格式,如文本,xml,数据库等,我们没有必要做到这么强大,我们只做符合系统的就可以了,记录到数据库,...CreateTime { get; set; } } } 创建SysLog的BLL层和DAL层 using System; using App.Models; using System.Linq... GetList(DBContainer db) { IQueryable list = db.SysLog.AsQueryable...分页和详细都没有问题了。 接下来是是异常的捕获,我们在何时处理异常?我们没有处理的异常该怎么办?我们处理异常时出现异常怎么又怎么办?

    2K80

    在LINQ to SQL中使用Translate方法以及修改查询用SQL

    LINQ to SQL在RTM之前的版本有个Bug,如果在查询中显式构造一个实体的话,在某些情况下会得到一系列完全相同的对象。...DataContextExtensions是我对于LINQ to SQL中DataContext对象的扩展,如果以后有新的扩展也会写在这个类中。...而这次扩展的关键在于新的ExecuteQuery方法,它接受一个IQueryable类型的对象作为参数,返回一个范型的List。...这种情况会在实体对象的属性名与数据表字段名不同的时候发生。在使用LINQ to SQL时默认生成的实体对象,其属性名与数据库的字段名完全对应,这自然是最理想的情况。...——不过显得不很漂亮,因此在使用LINQ to SQL时,我建议保持实体对象属性名与数据库字段名之间的映射关系。

    4.9K50

    让我们一起写出更有效的CSharp代码吧,少年们!

    尽可能使的基类和接口的适用范围更加的广阔 推荐使用泛型方法,除非类型参数是实例字段 Public static T Max(T left, T right) { return Comparer的调用不会造成任何的性能影响 区分继承和组合 在适当的场景下,用组合代替继承是常见的代码设计模式,这样可以减少类的污染,在选用策略模式的场景下,组合使用的非常的多,常见的形式如下:...区别IEnumerable和IQueryable的数据源 由于IQueryable数据源其实是对IEnumerable数据源的封装和增强,简答来说,IQueryable对象的相关数据处理操作的性能要远高于...这是需要注意的是,工具生成类和扩展类(一般来说类名相同,但文件名加上Ext并放入对应层次文件夹中)的设计,需要仔细考虑默认构造方法、属性值设置器、事件处理器等类成员的构建。...,尤其是在构建集成关系复杂的基类及其派生类时,由于子类、父类构造方法调用顺序原因,很容造成初始化和赋值的错误,用一个简单的例子来说明这个问题,借用书中的一句原话,"一个对象在其所有构造器执行完成前并没有完整的被构建

    1.1K50

    ASP.NET MVC5+EF6+EasyUI 后台管理系统(59)-BLL层重构

    在此务必共鸣一个问题,代码重构不是架构改变,这个系统的架构完全还是原来的接口多层注入架构!如下图所示完全不变 ?   ...在编译时,各个部分都必须可用来形成最终的类型。各个部分必须具有相同的可访问性,如 public、private 等。 如果将任意部分声明为抽象的,则整个类型都被视为抽象的。...如果将任意部分声明为密封的,则整个类型都被视为密封的。如果任意部分声明基类型,则整个类型都将继承该类。 指定基类的所有部分必须一致,但忽略基类的部分仍继承该基类型。...各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口。在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用。最终类型是所有部分在编译时的组合。...由于每一个业务模型的属性都不一致,这里不能用List来做,所以,一个表会生成一个BLL类。(图中红色部分) 如果生成红色部分。

    1.3K100

    .NET深入解析LINQ框架(六:LINQ执行表达式)

    到目前为止我们对LINQ的执行原理已经很清楚了,从它的前期构想到它真正为我们所用都有足够的证据,但是似乎问题并没有我们想的那么简单,问题总是在我们使用中频频出现尤其是新技术的使用,当然有问题才能有进步。...跟Linq to Object不同,Linq to Object是将Lambda直接解析成泛型Func类型的委托,但是我们很多人包括我自己都忽视了一个很大的细节,就是Provider在内部将对Expression...,这个功能对我们进行多条件组合查询时相当方便,不需要在进行IF、ELSE的多个判断,只需要顺其自然的在LINQ中的第一个表达式中进行判断就行了。...我们看一下多条件组合查询示例: ?...所有说如果多条件组合查询之间是and关系可以直接使用Linq,如果是or或者是or与and一起,那么可以使用上面这种链式查询方法。

    1.3K10
    领券