抓住五一假期尾巴和小伙伴们一起分享这两者的区别、大家在日常编码的过程当中肯定也注意过或者使用过、但是二者其实存在本质的区别

1、什么是LinqToObject呢?

LINQ to Objects指直接将 LINQ 查询与任何 IEnumerable 或 IEnumerable<T> 集合一起使用,而不使用中间 LINQ 提供程序或 API,例如 LINQ to SQL 或 LINQ to XML。 简单来说它是一种操作的方式、方法,从根本上说,“LINQ to Objects”表示一种新的处理集合的方法。 采用旧方法,必须编写指定如何从集合检索数据的复杂的 foreach 循环。 而采用 LINQ 方法,只需编写描述要检索的内容的声明性代码。

2、什么是LinqToSQL呢?

LINQ to SQL 是 .NET Framework 版本3.5 的一个组件,它提供用于将关系数据作为对象管理的运行时基础结构。在 LINQ to SQL 中,关系数据库的数据模型映射到用开发人员所用的编程语言表示的对象模型。 当应用程序运行时,LINQ to SQL 会将对象模型中的语言集成查询转换为 SQL,然后将它们发送到数据库进行执行。 当数据库返回结果时,LINQ to SQL 会将它们转换回您可以用您自己的编程语言处理的对象。

3、二者区别

LinqToObject:返回的是IEnumerable类型,数据其实已经在内存里,有个迭代器的实现,参数用的是委托

LinqToSql:返回的IQueryable类型,数据在数据库里面,这个list里面有表达式目录树---返回值类型--IQueryProvider(查询的支持工具,sqlserver语句的生成),其实userList只是一个包装对象,里面有表达式目录树,有结果类型,有解析工具,还有上下文,真需要数据的时候才去解析sql,执行sql,拿到数据的

一、通常LinqToSql 和我们的ORM框架结合使用、其内部是一个表达式目录树(也叫二叉树)、也就是LinqToSql 通过表达式式目录树对其进行拼接后、拼接完成后一次性转换成SQL语句至数据库中查询、基于数据库查询

二、我们的LinqToObject是将我们数据一次性从数据库中查询出来并放置内存中、然后通过内存中的数据进行过滤、筛选出我们的目标数据、基于内存查询

以下不难看出IQueryable继承自IEnumerable 但是二者却有着本质的区别

    //
// 摘要:
// 提供针对特定数据源(其中数据类型未未知)评估查询的功能。
//
// 类型参数:
// T:
// 数据源中数据的类型。
public interface IQueryable<out T> : IEnumerable<T>, IEnumerable, IQueryable
{
}

这是IQueryable一些实现 包含表达式目录树Expression参数并内置委托

  //
// 摘要:
// Filters a sequence of values based on a predicate. Each element's index is used
// in the logic of the predicate function.
//
// 参数:
// source:
// An System.Linq.IQueryable`1 to filter.
//
// predicate:
// A function to test each element for a condition; the second parameter of the
// function represents the index of the element in the source sequence.
//
// 类型参数:
// TSource:
// The type of the elements of source.
//
// 返回结果:
// An System.Linq.IQueryable`1 that contains elements from the input sequence that
// satisfy the condition specified by predicate.
//
// 异常:
// T:System.ArgumentNullException:
// source or predicate is null.
public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, int, bool>> predicate);

这是IEnumerable类型一些实现 并不是表达式目录树仅仅是一个委托来实现

 1         //
2 // 摘要:
3 // Filters a sequence of values based on a predicate. Each element's index is used
4 // in the logic of the predicate function.
5 //
6 // 参数:
7 // source:
8 // An System.Collections.Generic.IEnumerable`1 to filter.
9 //
10 // predicate:
11 // A function to test each source element for a condition; the second parameter
12 // of the function represents the index of the source element.
13 //
14 // 类型参数:
15 // TSource:
16 // The type of the elements of source.
17 //
18 // 返回结果:
19 // An System.Collections.Generic.IEnumerable`1 that contains elements from the input
20 // sequence that satisfy the condition.
21 //
22 // 异常:
23 // T:System.ArgumentNullException:
24 // source or predicate is null.
25 public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);

LinqToObject和LinqToSql的区别的更多相关文章

  1. 自己动手实现Expression翻译器 – Part I

    伴随.Net3.5到来的Expression,围绕着它产生了各种各样有趣的技术与应用,Linq to object.Linq to sql.Linq to sqllite.Linq to Anythi ...

  2. 动手实现Expression翻译器1

    动手实现Expression翻译器 – Part I   伴随.Net3.5到来的Expression,围绕着它产生了各种各样有趣的技术与应用,Linq to object.Linq to sql.L ...

  3. 有关linqtosql和EF的区别

    LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术.他们之间的本质区别在于EF对数据库架构和我们查询的类型实行了更好的解耦.使用EF,我们查询的对象不再 ...

  4. LinqToSql增加、修改、删除---(转载)

    LinqToSql ,EF:外键实体的CRD 2011-03-06 21:56:26|  分类: linq |  标签:编程  |字号 订阅           接触LinqTosql是很久的事情了, ...

  5. c#与java的区别

    经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...

  6. jquery和Js的区别和基础操作

    jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...

  7. 【原】nodejs全局安装和本地安装的区别

    来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...

  8. 探究@property申明对象属性时copy与strong的区别

    一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开 ...

  9. X86和X86_64和X64有什么区别?

    x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,ntel官方文档里面称为&qu ...

随机推荐

  1. WPF窗口和用户控件事件相互触发

    问题1: WPF项目里有一个窗口和一个用户控件,窗口和用户控件里都有一个Button,点击窗口里的Button如何触发用户控件里Button的Click事件 解答: //窗口代码 public par ...

  2. Salesforce LWC学习(三十一) Quick Action适配

    本篇参考:https://www.lightningdesignsystem.com/components/modals/ 随着salesforce lwc的优化,越来越多的项目从aura转到了lwc ...

  3. Elastic App Search 快速构建 ES 应用

    公号:码农充电站pro 主页:https://codeshellme.github.io App Search 是 Elastic 家族中的一个产品,它可以帮助我们(基于 ES)快速高效的构建搜索应用 ...

  4. 剑指 Offer 04. 二维数组中的查找 (思维)

    剑指 Offer 04. 二维数组中的查找 题目链接 本题的解法是从矩阵的右上角开始寻找目标值. 根据矩阵的元素分布特性, 当目标值大于当前位置的值时将row行号++,因为此时目标值一定位于当前行的下 ...

  5. react+ts封装AntdUI的日期选择框之月份选择器DatePicker.month

    需求:由于在项目开发中,当需要使用该组件时都需要对该组件进行大量的代码输出,为了方便代码统一管理,减少冗余代码,所以将此组件进行二次封装. 其他成员在使用中只需将自己的设置通过对应的参数传递到该组件, ...

  6. P3387 【模板】缩点 题解 (Tarjan)

    题目链接 P3387 [模板]缩点 解题思路 这几天搞图论,好有趣hhh,多写几篇博客. 上次学\(Tarjan\)求割点,这次缩点. 思路大概是多一个栈和染色的步骤,每次\(Tarjan\)的时候把 ...

  7. go语言几个最快最好运用最广的web框架比较

    比较一下常用的golang web框架 令人敬畏的Web框架 如果你为自己设计一个小应用程序,你可能不需要一个Web框架,但如果你正在进行生产,那么你肯定需要一个,一个好的应用程序. 虽然您认为自己拥 ...

  8. C# 获取网页信息

    获取网页源码 ///通过HttpWebResponse public string GetUrlHtml(string url) { string strHtml = string.Empty; Ht ...

  9. 【MCU】国民N32固件库移植

    目录 前言 移植N32Gxxx系列要点 前言 链接: 李柱明博客 移植AT32库&FreeRTOS教程 由于大部分国产MCU移植固件库.RTOS源码都是差不多的,所以本文不讲细节,如想熟悉移植 ...

  10. HashMap 这套八股,不得背个十来遍?

    尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 「CS-Wiki」Gitee ...