将不确定变成确定~LINQ查询两种写法,性能没有影响,优化查询应该是“按需查询”

简介:

如果在linq中希望进行一对多的复合查询时,请直接在查询中使用join into,或者使用let 关键字,当然在建立实体时动态赋值对于查询的性能也是没有影响的,两次查询结果完成相同

一 :在实体中赋值

var linq = from data in this.GetModel()
                       join data2 in iWebDepartmentsRepository.GetModel() on data.DepartmentID equals data2.DepartmentID
                       select new WebManageUsers_Ext
                      {
                          ManageUserID = data.ManageUserID,
                          LoginName = data.LoginName,
                          WebDepartments_Extend = data2,
                          WebManageUser_WebManageRoles_Extend = new WebManageUser_WebManageRolesRepository().GetModel().Where(i => i.ManageUserID == data.ManageUserID),
                          AvatarUrl = data.AvatarUrl,

                      };

在语句中使用let关键字

var linq = from data in this.GetModel()
                       join data2 in iWebDepartmentsRepository.GetModel() on data.DepartmentID equals data2.DepartmentID
                       let list = new WebManageUser_WebManageRolesRepository().GetModel().Where(i => i.ManageUserID == data.ManageUserID)
                       select new WebManageUsers_Ext
                      {
                          ManageUserID = data.ManageUserID,
                          LoginName = data.LoginName,
                          WebDepartments_Extend = data2,
                          WebManageUser_WebManageRoles_Extend = list,
                          AvatarUrl = data.AvatarUrl,

                      };
两次的SQL分析器的结果是完成一样的
image image 
当然,对于LINQ的查询,最好的方式就是“按需”查询,也就是说,用到哪些字段就select哪些字段,代码可能是这样:
var linq = from data in db.WebManageUsers
                     join data2 in db.WebDepartments on data.DepartmentID equals data2.DepartmentID
                     let list1 = db.WebManageUser_WebManageRoles.Where(i => i.ManageUserID == data.ManageUserID).Select(j => new WebManageUser_WebManageRoles_Ext
                    {
                        ManageRoleID = j.ManageRoleID,
                        ManageUserID = j.ManageUserID
                    })
                     select new WebManageUsers_Ext
                     {
                         ManageUserID = data.ManageUserID,
                         LoginName = data.LoginName,
                         RealName = data.RealName,
                         WebDepartments_Extend = new WebDepartments_Ext { DepartmentName = data2.DepartmentName },
                         WebManageUser_WebManageRoles_Extend = list1,

};

本文转自博客园张占岭(仓储大叔)的博客,原文链接:将不确定变成确定~LINQ查询两种写法,性能没有影响,优化查询应该是“按需查询”,如需转载请自行联系原博主。

目录
相关文章
|
前端开发 Java 数据库连接
MyBatis查询优化:枚举在条件构建中的妙用
MyBatis查询优化:枚举在条件构建中的妙用
|
7月前
|
数据采集 缓存 搜索推荐
NewsNow:开源个性化新闻聚合平台
NewsNow是一个功能强大且易于上手的新闻聚合项目,通过简单的部署步骤,你就可以拥有一个属于自己的个性化新闻聚合平台。无论是学习TypeScript、了解Web开发,还是打造专属的新闻阅读工具,NewsNow都是一个不错的选择。
391 2
NewsNow:开源个性化新闻聚合平台
|
10月前
|
设计模式 C# C++
责任链模式(Chain of Responsibility Pattern)
责任链模式是一种行为型设计模式,允许多个对象按顺序处理请求,直到某个对象处理为止。适用于多个对象可能处理同一请求的场景,如请假审批流程。优点是灵活性高、降低耦合,但责任链过长可能影响性能。
284 3
|
索引 Python
离线安装Python依赖:以six和websocket-client为例
离线安装Python依赖:以six和websocket-client为例
641 0
|
SQL 关系型数据库 数据库连接
详解 Entity Framework(EF)核心组件与数据访问方法探索
Entity Framework是一个ORM框架,简化.NET开发者与数据库的交互。它始于.NET Framework的一部分,但现在可通过NuGet独立获取。ORM允许对象模型直接映射到数据库结构,避免直接编写SQL。
1768 2
详解 Entity Framework(EF)核心组件与数据访问方法探索
C#动态查询:巧用Expression组合多条件表达式
在C#中,利用`Expression`类和`AndAlso`、`OrElse`方法,可以组合两个`Expression<Func<T, bool>>`以实现动态多条件查询。该方法通过构建表达式树,方便地构建复杂查询。示例代码展示了如何创建表达式树,分别检查年龄大于等于18和姓名为"John"的条件,并使用`AndAlso`组合这两个条件,最终编译为可执行的委托进行测试。
629 1
|
应用服务中间件 nginx 数据安全/隐私保护
使用Harbor搭建Docker私有仓库
Harbor是一款开源的企业级Docker仓库管理工具,分为私有与公有仓库两种类型,其中私有仓库被广泛应用于运维场景。Harbor提供图形化界面,便于直观操作,并且其核心组件均由容器构建而成,因此安装时需预先配置Docker及docker-compose。Harbor支持基于项目的用户与仓库管理,实现细粒度的权限控制;具备镜像复制、日志收集等功能,并可通过UI直接管理镜像,支持审计追踪。部署Harbor涉及配置文件调整、登录认证等步骤,并可通过客户端进行镜像的上传、拉取等操作。系统内置多种角色,包括受限访客、访客、开发者、维护人员及管理员,以满足不同场景下的使用需求。
472 0
|
存储 Java Maven
Java能这么轻松识别二维码
Java能这么轻松识别二维码
1957 1
|
算法 Java 程序员
三阶魔方公式解析与优化技巧
三阶魔方公式解析与优化技巧
|
Linux JavaScript Apache
Linux下安装zookeeper-3.4.13
Linux下安装zookeeper-3.4.13
10383 0