wordpress网站插件下载,免费自助建站网站一览自助建站平台,设计公司网站源码,南宁网红打卡咨询区 Rahul Kishore#xff1a;我的web需要访问数据库#xff0c;但是表比较大#xff0c;我仅仅想要获取该表中 N 条数据#xff0c;我查阅了 MSDN 文档#xff0c;看到了一个 Take() 方法#xff0c;我现在很疑惑它的运行机制是下面哪一种#xff1f;先从数据库中获… 咨询区 Rahul Kishore我的web需要访问数据库但是表比较大我仅仅想要获取该表中 N 条数据我查阅了 MSDN 文档看到了一个 Take() 方法我现在很疑惑它的运行机制是下面哪一种先从数据库中获取所有记录然后在内存中获取 N 条记录。直接生成 TOP 关键词到数据库中。请求大家的帮助。回答区 NicTake(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 写法的好工具。更多可以参考MSDN文档https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/linq/return-or-skip-elements-in-a-sequence?redirectedfromMSDNJon 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 之类的半自动化框架。