首页 > 其他分享 >LINQ中使用分页和子查询优化语句

LINQ中使用分页和子查询优化语句

时间:2024-05-16 21:44:27浏览次数:22  
标签:语句 LINQ 查询 modelType 和子 login testType ID



通过分页加子查询优化后代码:

 1 var data = from testType in context.TestType
 2                         join modelType in context.ModelType on testType.ModelType equals modelType.ID into modelJoin
 3                         from modelType in modelJoin.DefaultIfEmpty()
 4                         join login in context.Login on testType.TestUserId equals login.ID into createJoin
 5                         from login in createJoin.DefaultIfEmpty()
 6                         select new
 7                         {
 8                             ID = testType.ID,
 9                             ModelTypeName = modelType.Type,
10                             TestTypeName = testType.TestTypeName,
11                             TestUser = login.Name,
12                             CreateTime = testType.CreateTime
13                         };
14             int row = data.Count();
15             // 在数据库端执行排序、分页操作
16             int startIndex = (pageNumber - 1) * pageSize;
17             var pagedData = data.OrderByDescending(t => t.ModelTypeName).Skip(startIndex).Take(pageSize);

优化前

 1 var data = from testType in context.TestType
 2                         join modelType in context.ModelType on testType.ModelType equals modelType.ID into modelJoin
 3                         from modelType in modelJoin.DefaultIfEmpty()
 4                         join login in context.Login on testType.TestUserId equals login.ID into createJoin
 5                         from login in createJoin.DefaultIfEmpty()
 6                         select new
 7                         {
 8                             ID = testType.ID,
 9                             ProductName = modelType.Type,
10                             TestTypeName = testType.TestTypeName,
11                             Count = (from testCase in context.TestCaseList
12                                      where testCase.TestType == testType.ID
13                                      select testCase).Count(),
14                             TestUser = login.Name,
15                             CreateTime = testType.CreateTime
16                         };

 

这两段代码的主要区别在于计算 TestType 的相关测试用例数量。第一段代码在 LINQ 查询中使用了子查询来计算测试用例数量,而第二段代码在 LINQ 查询外部使用了一个额外的 LINQ 查询来计算测试用例数量。

在效率上,两者可能会有所不同:

  • 第一段代码中的子查询会在数据库端执行,因此它会被合并到主查询中,形成一个单一的 SQL 查询。这意味着数据库可以更好地优化查询计划,并且可以在单次查询中检索所有所需的数据。这通常是更有效率的方式。

  • 第二段代码中的额外 LINQ 查询会导致两个独立的 SQL 查询:一个用于获取主数据,另一个用于计算测试用例数量。这可能会导致性能损失,特别是当数据量很大时,因为需要执行额外的数据库查询。

因此,第一段代码中的子查询方法通常更有效率,因为它将所有逻辑合并到一个查询中,在数据库端执行。第二段代码中的额外 LINQ 查询方法则可能会导致性能损失,尤其是在处理大数据集时。

 

标签:语句,LINQ,查询,modelType,和子,login,testType,ID
From: https://www.cnblogs.com/lei-zi/p/18196785

相关文章

  • sql 查询语句
    表结构如下:1、显示所有职工的基本信息。select*fromworker;2、查询所有职工所属部门的部门号,不显示重复的部门号。selectdistinct`部门号`fromworker;3、求出所有职工的人数。selectcount(*)as'人数'fromworker;4、列出最高工和最低工资。法一select......
  • openGauss 执行-SQL-语句时-提示-Lock-wait-timeout
    执行SQL语句时,提示Lockwaittimeout问题现象执行SQL语句时,提示"Lockwaittimeout"。ERROR:Lockwaittimeout:thread140533638080272waitingforShareLockonrelation16409ofdatabase13218after1200000.122msERROR:Lockwaittimeout:thread1405336380......
  • Oracle update语句引起大量业务卡顿
    记一次update语句引起大量业务卡顿分析处理过程,聊聊我的思路。技术人人都可以磨炼,但处理问题的思路和角度各有不同,希望这篇文章可以抛砖引玉。以一个例子为切入点一、问题背景某业务模块反馈最近出现过几次业务卡顿,数据库中定位到有几个insertinto语句的gc等待比较严重,虽然......
  • 根据某个查询条件的前50条数据来决定UPDATE语句的更新范围
    在MySQL中,如果你想要根据某个查询条件的前50条数据来决定UPDATE语句的更新范围,你可以使用子查询与LIMIT子句来实现。但是,直接在一个UPDATE语句中使用LIMIT可能会引发一些问题,因为LIMIT在UPDATE语句中的行为可能与在SELECT语句中的行为不完全相同,并且不是所有的数据库系统都支持在U......
  • 流程控制语句
    流程控制语句1Scanner控制台输入使用方式:导包:importjava.util.Scanner;创建变量Scanner变量名=newScanner(System.in);使用变量名.nextInt();publicstaticvoidmain(String[]args){//获取用户键盘录入的信息Scannerscanner=n......
  • Shell编程之循环语句与函数
    目录1.循环语句(1)for循环语句(2)while循环语句(3)untli循环语句(4)双层循环2.Shell函数(1)函数返回值:(2)函数传参:(3)函数变量的作用范围:(4)递归3.Shell数组(1)定义数组(2)查看数组(3)数组分片、字符替换和删除(4)追加(5)数组排序算法:1.循环语句(1)for循环语句for变量in取值列表for((变量=初始值;变量......
  • openGauss 通过INSERT语句直接写入数据
    通过INSERT语句直接写入数据用户可以通过以下方式执行INSERT语句直接向openGauss数据库写入数据:使用openGauss数据库提供的客户端工具向openGauss数据库写入数据。请参见向表中插入数据。通过JDBC驱动连接数据库执行INSERT语句向openGauss数据库写入数据。详细内容请参见......
  • Python执行PostgreSQL数据库查询语句,并打印查询结果
    哈喽,大家好,我是木头左!准备工作:安装必要库和设置数据库连接在开始使用Python执行PostgreSQL数据库查询之前,需要确保已经安装了psycopg2这个库,它是Python语言中用来操作PostgreSQL数据库的一个适配器。可以通过以下命令进行安装:pipinstallpsycopg2-binary安装完成后,需要创......
  • shell条件语句
    一、测试文件测试testtest的语法test条件表达式[条件表达式]test选项文件-d:判断是否是目录(Directory)-f:判断是否是普通文件(File)-b:判断是否是块设备(block)-c:判断是否是字符设备-e:判断是否存在(Exist)-a:判断是否存在-r:判断是否有读的权限(Read)-w:判断......
  • psql 经常用语句
    webcss报错,没有登陆验证等问题deleteFROM"ir_attachment"wheremimetypelike'%/css%';deleteFROM"ir_attachment"wheremimetypelike'%/javascript%';Thereare4othersessionsusingthedatabase解决方式selectpg_terminate_......