发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
对于SQL左外连接我想没什么可说的,left join将左表数据都获出来,右表数据如果在左表中不存在,结果为NULL,而对于LINQ来说,要实现left join的效果,也是可以的,在进行join时直接into到集合变量就可以了,但在赋值时,如果只需要集合的一条记录,那在写法上又会有两种,而这两种写法所产生的性能是相关千里的,下面来看一下. 首先是SQL的左外连接
SELECT [t6].[CourseID] , [t6].[UserID] , [t6].[CourseName] , [t6].[ResourceID] , [t6].[StudyTime] , [t6].[BeginTime] , [t6].[EndTime] , [t6].[value] AS [CategoryID] , [t6].[value2] AS [ClassHour] , [t6].[value3] AS [Percent] , [t6].[test] , [t6].[ID] , [t6].[SmallPicture]FROM dbo.User_Course AS t6 LEFT OUTER JOIN [User_StudyRecord] AS t3 ON t6.UserID = t3.UserID AND t3.ResourceID = t6.ResourceID
当它被翻译成LINQ之后,是分页产生的结果,所以感觉更很乱了,呵呵,(LINQ在翻译SQL时,本来就够乱的,再一分页,用上row_number,更乱了),但结果是一样的, 咱们就不管微软是怎么翻译的了
我们重要是看一下,实现时LINQ代码的写法 第一种,性能低下的,如果结果为20条记录,那它需要多连接20次
var linq = from _data in new User_Course(UnitOfWork).GetEntities() let list = new Res_Item(UnitOfWork).GetEntities().Select(t => new Entity.Res_Item { ID = t.ID, SmallPicture = t.SmallPicture, }).Where(i => i.ID == _data.ResourceID) let list2 = new User_StudyRecord(UnitOfWork).GetModel().Select(r => new Entity.User_StudyRecord { StudyContent = r.StudyContent, UserID = r.UserID, Res_ItemID = r.Res_ItemID, }).Where(i => i.Res_ItemID == _data.ResourceID && i.UserID == _data.UserID) from record in list2.DefaultIfEmpty() where _data.CategoryID != (int)CustomEnum.CategoryType.BroadcastProgram && _data.CategoryID != (int)CustomEnum.CategoryType.AskRoom select new Entity.User_Course { CourseID = _data.CourseID, UserID = _data.UserID, CourseName = _data.CourseName, ResourceID = _data.ResourceID, StudyTime = _data.StudyTime, BeginTime = _data.BeginTime, EndTime = _data.EndTime, CategoryID = _data.CategoryID ?? 2, Res_Item = list.FirstOrDefault(), ClassHour = _data.ClassHour ?? 0, Percent = _data.Percent ?? 0, Prev_ResourceName = record == null ? string.Empty : record.StudyContent, };
第二种,性能较好的
总结:对于第一种性能较差的写法产生的结果,类似于LINQ本身提交的延时加载,即结果集中,每条记录都去查询数据库,它不会一次将数据获出来,这种作用在特定场合是 有它的好处的,但不适用于所有,当返回结果集比较大时,不应该使用延时加载!
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
LINQ标准查询操作符(二)——Join、GroupJoin、GroupBy、Concat、
LINQ标准查询操作符(二)——Join、GroupJoin、GroupBy、Concat、LINQ标准查询操作符(二)——Join、GroupJoin、GroupBy、Concat、四、联接操作符。LINQ有两个联接操作符:Join和GroupJoin。GroupJoi...
在Linq to sql 和 Entity framework 中使用lambda表达式实现left join
在Linq to sql 和 Entity framework 中使用lambda表达式实现left join?我们知道lambda表达式在Linq to sql 和 Entity framework 中使用join函数可以实现inner join,那么怎么才能在lambda表达式中实现l...
oracle数据库表结构导出至Excel
oracle数据库表结构导出至Excel 热门频道。1999-2019, CSDN.NET, All Rights Reserved 登录 原 oracle数据库表结构导出至Excel 奋斗的小青年xsyuan 阅读数:1546 2018-10...
inner join on, left join on, right join on讲解
SELECT fieldsFROM table1 INNER JOIN table2ON table1.field1 compopr table2.field1 ANDON table1.field2 compopr table2.field2) ORON table1.field3 compopr table2.field3)];SELECT fieldsFROM ta...
sql语法:inner join on, left join on, right join on详细使用方法
sql语法:inner join on, left join on, right join on详细使用方法nner join(等值连接) 只返回两个表中联结字段相等的行。SELECT * FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号) INNER JOIN...
sql之join用法完全版【转载】
sql之join用法完全版【转载】 SQL中大概有这么几种JOIN:left outer join.full outer join.首先都是基于cross join(笛卡尔乘积),然后是inner join,在笛卡尔乘积的结果集中去掉不符合连接条件的行。l...
R语言 | 第7期.数据合并大全
member <- band_members ## 内置数据instrument <- band_instruments ## 内置数据data1 <- left_join(member, instrument, by ...
这次终于一次性把merge()、join()、concat()的区别讲清楚了
#数据帧1df1 = pd.DataFrame({"C1":["1", "2"], "C2":["3", "4"],}, ind...
盘点一道使用pandas.merge()和pandas.join()函数实战应用题目
盘点一道使用pandas.merge()和pandas.join()函数实战应用题目。data2.merge(data1, how=''left'').value_counts('&...
微信扫码,在手机上查看选中内容