Linq 下的 Take() 方法内部机制是怎样的?

咨询区

  • Rahul Kishore

我的web需要访问数据库,但是表比较大,我仅仅想要获取该表中 N 条数据,我查阅了 MSDN 文档,看到了一个 Take() 方法,我现在很疑惑它的运行机制是下面哪一种?

  1. 先从数据库中获取所有记录,然后在内存中获取 N 条记录。

  2. 直接生成 TOP 关键词到数据库中。

请求大家的帮助。

回答区

  • Nic

Take(N) 会在你的 sql 语句中添加 TOP N 关键词,这样你就可以获取前 N 条记录,参考如下 LINQ 语句。

var query = await dbContext.Lookup.Where(w => w.LookupCd == '1').Take(10).ToListAsync();

生成的sql脚本。

SELECT TOP (10) [Extent1].[LookupId] AS [LookupId], [Extent1].[LookupTypeId] AS [LookupTypeId], [Extent1].[LookupCd] AS [LookupCd], [Extent1].[LookupName] AS [LookupName], [Extent1].[LookupDescription] AS [LookupDescription]
FROM [dbo].[Lookup] AS [Extent1]
WHERE '1' = [Extent1].[LookupCd]

如果你用的是 SQL Server 的话,可以用 SQL Profiler 去捕获下生成出来的 SQL, 它是一个练习 LINQ 写法的好工具。

c35bc42fae52cb7e46d4040b36d0ef5e.png

更多可以参考MSDN文档:https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/linq/return-or-skip-elements-in-a-sequence?redirectedfrom=MSDN

  • Jon Hanna

它会按照你认为的最好预期去执行的。

你的 Database SDK 引擎知道针对不同数据库切换不同的查询关键词,比如说:对于 PostgreSQL, MySQL 或者 SQL Lite 这三种会生成 LIMIT,如果是 DB2 的话,会生成 "select first " + n + "from" ,如果是 Oracle 的话,又是 select * from (" + restOfQuery + ") where rownum <= " + n

只要有人针对某种数据库写了一套 linq to sql 引擎,所以只要引擎支持的语法,你都不需要过度担心。

顺便提一下,针对First()扩展方法 ,SQL语句可能会变成 top 1 ,对于 Single() 方法,SQL语句可能会生成 top 2,这么做的原因是 sdk 引擎可以方便的测试当前是不是 only 1,如果不是就会抛出异常。

点评区

现在连接数据库的sdk已经非常智能了,如果项目复杂度不高的话,大可以愉快的使用各种如 EntityFramework,Nhibernate,如果业务复杂度高,可以使用 Dapper 之类的半自动化框架。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何直接soap字符串,访问webservice

2019独角兽企业重金招聘Python工程师标准>>> 1.Webservice.GetVcardByUserNo(String userId&#xff0c;String userNo);这个是封装了的webservice接口。 2.在程序中连续两次调用该接口时&#xff0c;ksoap2在解析第二次调用返回的结果时抛异常。 异常信息如下&…

《哈利波特》电影全集+有声书免费领取!带你重返儿时魔法世界……

全世界只有3.14 % 的人关注了爆炸吧知识说到哈利波特系列&#xff0c;几乎人人皆知&#xff0c;享誉世界&#xff0c;风靡全球的哈利波特究竟有什么无穷魔力呢&#xff1f;《哈利波特》是英国作家JK罗琳的魔幻文学系列小说&#xff0c;共7集&#xff0c;其中前六部以霍格沃茨魔…

.NET6下周发布真的香,可不少人却只会.NET Framework!

倒计时7天&#xff0c;.NET6VS2022C#10将同时发布正式版&#xff0c;宣告.NET步入全新篇章&#xff0c;各种新语法、新框架、新技术都如约而至&#xff0c;令人期待&#xff01;近年来&#xff0c;.NET跨平台持续推出新版本&#xff0c;开源社区也不断涌现各种优秀框架&#xf…

java环境怎样搭建_如何学习JAVA?怎么搭建JAVA环境?怎么安装JDK?

JAVA在学习JAVA前&#xff0c;我们必须了解并搭建好JAVA所需的开发环境&#xff0c;要让你写代码能让机器听得懂并执行&#xff0c;JDK(Java Developers Kits)自然是是必须的安装JDK前的准备首先我们要先知道自己的电脑系统是几位版本的&#xff0c;右键”此电脑“点击菜单里的…

神奇的机械动态图,看了一遍又一遍!最后一个真神奇~

全世界只有3.14 % 的人关注了爆炸吧知识神奇的机械科技动态图&#xff0c;看了一遍又一遍&#xff01;最后一个真神奇&#xff5e;▲金属切割的慢镜头&#xff0c;美&#xff01;▲齿轮变速原理演示▲塑料成型机器▲切丝的食品机器▲螺旋状的通心粉制造▲高温融化锁的过程▲一次…

Envoy实现.NET架构的网关(三)代理GRPC

.NET网关与Gateway实战-Envoy与kong课程Envoy实现.NET架构的网关&#xff08;一&#xff09;静态配置与文件动态配置Envoy实现.NET架构的网关&#xff08;二&#xff09;基于控制平面的动态配置什么是GRPCgRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架。gRPC 的主要好处…

Linux 下用来查询安装包信息的RPM选项

Linux 下用来查询安装包信息的RPM选项RPM是RedHat的包管理器&#xff0c;用来安装、卸载、升级和查询基于RedHat Linux的安装包。RHEL和基于它的系统使用rpm命令来完成这些功能。AD&#xff1a;RPM是RedHat的包管理器&#xff0c;用来安装、卸载、升级和查询基于RedHat Linux的…

如何用Java讲一句话重复五遍_Java 0515 第二次课作业

import java.util.*;public class Work_01 {public static void main(String[] args) {Scanner scan new Scanner(System.in);System.out.println("上午是否合格?");String judge scan.next();//输入是否while(!"是".equals(judge)){//用equals方法判断…

一张图看懂华为计算全联接2020

全世界只有3.14 % 的人关注了爆炸吧知识END◆ 推荐阅读 ◆点击下方图片即可阅读华为邓泰华&#xff1a;让每一位开发者的智慧汇聚成全生态创新&#xff0c;共同点亮多样性计算新时代左右滑动查看更多☟

独立开发一个云(PaaS)的核心要素, Go, Go, Go!!!

最近一年的工作&#xff0c;有很大的比重在做云平台的事情&#xff0c;简单来说&#xff0c;就是为公司内用户提供一个PaaS&#xff0c;用户可以在我们的云平台上方便的将单机服务程序扩展为多实例程序&#xff0c;以平台服务化的方式对外提供。在这里简单分享一下。 首先简单说…

C# 使用Timer控件设置时间间隔

Timer 控件可以定期引发事件&#xff0c;该控件是为 Windows 窗体环境设计的。时间间隔的长度由 Interval 属性定义&#xff0c;其值以毫秒为单位。若启用了该组件&#xff0c;则每个时间间隔引发一个 Tick 事件&#xff0c;在该事件中添加要执行的代码。如图1 所示为 Timer 控…

吐血整理!近二十年全国数学联赛赛题大全,烧脑全集来啦!

1981年&#xff0c;中国数学会开始举办"全国数学联赛"&#xff0c;经过1981、1982、1983三年的实践&#xff0c;这一群众性的数学竞赛活动得到了广大中学师生欢迎&#xff0c;也得到教育行政部门、各级科学技术协会、以及社会各阶层人士的肯定和支持。"试题所涉…

组装电脑教程(转载)

组装电脑已经越来越受欢迎&#xff0c;性价比在那摆着&#xff0c;而之前品牌机引以为傲的售后服务也已经被组装机赶上&#xff0c;可以说已经没有不选组装机的理由&#xff0c;就连王思聪也是买组装电脑&#xff08;几万元土豪组装机&#xff09;。但是组装电脑对于新手却不是…

java基本类型与引用数据类型_java基本数据类型与引用数据类型总结

昨天京东笔试的一道选择题&#xff0c;被坑了。最近一直在做笔试题&#xff0c;发现自己学了两年多的java&#xff0c;三大框架什么都会&#xff0c;却连基本的拆箱装箱都忘了。昨天考的引用数据类型&#xff0c;基本数据类型都不知道。看来得好好把基础复习几遍了。总结&#…

男朋友的内裤旧了不要扔,关键时刻有大用......

1 女生没有运动内衣不用愁翻翻衣柜总有办法▼2 孩子&#xff0c;你这家庭咋这么散装呢&#xff1f;▼3 这个原地打滑的本领也是一门技术▼4 三轮车夫&#xff1a;我顶不住了......▼5 有空不仅可以一起洗澡还可以一起拉屎▼6 哟&#xff01;哥们儿&#xff0c;我来陪你啦…

基于事件驱动架构构建微服务第9部分:处理更新

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part10-handling-updates-and-deletes/在本文中&#xff0c;我将讨论如何处理事件溯源系统上的更新。在前面的步骤中&#xff0c;我将系统的所有业务变化存储为事件&…

理解离散傅立叶变换(一. 傅立叶变换的由来)

转自&#xff1a;http://blog.csdn.net/dznlong/article/details/2261150理解离散傅立叶变换&#xff08;一&#xff09;------傅立叶变换的由来关于傅立叶变换&#xff0c;无论是书本还是在网上可以很容易找到关于傅立叶变换的描述&#xff0c;但是大都是些故弄玄虚的文章&…

浅谈入行

2019独角兽企业重金招聘Python工程师标准>>> 2006年开始参加工作&#xff0c;从编码&#xff0c;到带人&#xff0c;再到设计&#xff0c;自己不知不觉也走过了许多个年头。在公司从外包&#xff0c;到国内前后也参加了十多个不同的项目&#xff0c;每年都会有一些新…

数学界再出变态神人!竟用一个比基尼方程,暴力吊打美国数学家!看完我惊了......

全世界只有3.14 % 的人关注了爆炸吧知识没时间了快上车&#xff01;最近&#xff0c;有粉丝给超模君发了一些图片。早跟你们要说&#xff0c;要好好学数学。现在好了&#xff0c;连沙发问题都不懂&#xff01;没办法&#xff0c;作为数学界屈指可数的老司机&#xff0c;是时候挺…

Envoy实现.NET架构的网关(四)集成IdentityServer4实现OAuth2认证

.NET网关与Gateway实战-Envoy与kong课程什么是OAuth2认证简单说&#xff0c;OAuth 就是一种授权机制。数据的所有者告诉系统&#xff0c;同意授权第三方应用进入系统&#xff0c;获取这些数据。系统从而产生一个短期的进入令牌&#xff08;token&#xff09;&#xff0c;用来代…