将不确定变成确定~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分析器的结果是完成一样的
  
当然,对于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查询两种写法,性能没有影响,优化查询应该是“按需查询”,如需转载请自行联系原博主。

时间: 2024-12-26 17:54:07

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

sql查询两种写法

写法一: string sql = "select * from tbColumns"; using (SqlConnection conn = new SqlConnection(PubVarData.ConnectionString)) { conn.Open(); SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = sql; cmd.CommandType = CommandTyp

Linq 完成搜索功能的两种写法~

        protected void Button1_Click(object sender, EventArgs e)         {             NorthWindDataContext db = new NorthWindDataContext();            var search = from i in db.InBill                          //  where SqlMethods.Like(i.SaleName, "%

分页查询 索引-分页查询两种方式结果却不同

问题描述 分页查询两种方式结果却不同 select * from emp where rowid in (select rid from (select rownum rn ,rid from (select rowid rid from emp ) where rownum where rn>4) order by deptno; select * from (select t.*,rownum rn from (select * from emp ) t where rownum )wher

Java范型的两种写法

1.原始的DAO层的类: package com.test; public class UserDao { public void add(User user){ //.保存实体的代码 } public User get(int id) { //.查询实体的代码 return null; } } 其中,User类代码比较简单,如下: package com.test; public class User { private int id; private String name; public

状态机的两种写法

有限状态机FSM思想广泛应用于硬件控制电路设计,也是软件上常用的一种处理方法(软 件上称为FMM--有限消息机).它把复杂的控制逻辑分解成有限个稳定状态,在每个状态 上判断事件,变连续处理为离散数字处理,符合计算机的工作特点.同时,因为有限状 态机具有有限个状态,所以可以在实际的工程上实现.但这并不意味着其只能进行有限 次的处理,相反,有限状态机是闭环系统,有限无穷,可以用有限的状态,处理无穷的 事务.     有限状态机的工作原理如图1所示,发生事件(event)后,根据当前状态(cur_st

link以下两种写法结果一样,有什么区别?

问题描述 link以下两种写法结果一样,有什么区别? 写法1: scores.GroupBy(x=>x.StuID).OrderBy(x =>x.Sum()).ThenBy(x => x.Key) 写法2: scores.GroupBy(x=>x.StuID).OrderBy(x =>x.Key).OrderBy(x=>x.Sum()) 解决方案 写法2不推荐,理论上这个结果和写法1一样,但是基于这样一个假设,那就是OrderBy执行的是稳定的排序. 所谓稳定的排序,就

select-link中这样两种写法有什么区别?

问题描述 link中这样两种写法有什么区别? var query = from x in table select x; foreach (var item in x) { ... } foreach (var item in table) { ... } 解决方案 两种写法一样,而且性能也一样

位图-下面两种写法的区别,为什么第一种会报错?

问题描述 下面两种写法的区别,为什么第一种会报错? 第一种 BitmapFactory.decodeStream(conn.getInputStream()); 第二种 InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); 解决方案 没有看出有什么不同,InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decode

ios-下面两种写法的区别是什么

问题描述 下面两种写法的区别是什么 @interface XXX () @property (strong nonatomic) UITableView *tableView;@end@implementation XXX - (void)viewDidLoad { self.tableView = [[UITableView alloc]initWithFrame:self.view.bounds]; //vs 这两种写法的区别是什么? 有什么好处? UITableView *tbView =