博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LightSpeed 的Left Join Bug解决方案
阅读量:5321 次
发布时间:2019-06-14

本文共 1492 字,大约阅读时间需要 4 分钟。

在使用LightSpeed对数据库进行Left Join或Right Join操作时,经常会报一些匪夷所思的异常。

明明表没有问题,表面上语句写的也没问题,可总是报错。看分析器里的SQL就知道了,是LightSpeed对Left Right Join的解析是有问题的。

注:LS对Left Join和 Right Join 最后都会解析成Group Join来处理

当然这种情况只是偶尔发生,是因为某些表及关系的创建方式问题(LS官网要求把项目发给他们来分析问题,嫌麻烦 就没有继续下去,具体原因就没有了解)

现在,可以用另外一种方式来绕过这个Bug(用FindBySQL或者存储过程也可以,但是我不想用SQL语句处理,因为表结构发生变化后,不能第一时间发现问题)

Query query2 = new Query{    EntityType = typeof(LQ_StudentApply),    QueryExpression = Entity.Attribute
("LQ_SchoolId") == SchoolId, Order = Order.By("CreatedOn").Descending()};//通过OuterJoin来处理Left Join和Right Joinquery2.Join = Join.Outer(typeof(LQ_StudentApply), typeof(LQ_Member), "Operator", "Id");var rst1 = dbPlatform.Find(query2, query2.Mappings);var saList = rst1.GetCollection
();var oList = rst1.GetCollection
();//Inner Joinquery2.Join = Join.Inner(typeof(LQ_StudentApply), typeof(LQ_Member), "LQ_MemberId", "Id");var rst2 = dbPlatform.Find(query2, query2.Mappings);var memList = rst2.GetCollection
();//拼合三个表的数据var query = saList.Zip(memList, (sa, mem) => new{ SA = sa, Mem = mem}).Zip(oList, (mix, o) => new{ MemberId = mix.Mem.Id, SId = mix.SA.Id, OperatorName = o != null ? o.RealName : ""});

解析出来的SQL语句大体就是

SELECT *FROM LQ_StudentApply SALEFT JOIN LQ_Member M ON SA.Operator = M.IdINNER JOIN LQ_Member MEM ON SA.LQ_MemberId = MEM.IdWHERE SA.LQ_SchoolId = 'SchoolId'ORDER BY SA.CreatedOn DESC

 

转载于:https://www.cnblogs.com/TiestoRay/p/4688479.html

你可能感兴趣的文章
thinkphp的select和find的区别
查看>>
小程序开发笔记
查看>>
Web框架高级功能之模板、拦截器、Json、打包
查看>>
如何辨别一个程序员的水平高低?是靠发量吗?
查看>>
安装scikit-learn过程记录
查看>>
数据库的标识符可以有多长
查看>>
新手村之循环!循环!循环!
查看>>
在创业公司上班的感受
查看>>
Shell脚本
查看>>
masm32V11配置
查看>>
ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath
查看>>
通过Python、BeautifulSoup爬取Gitee热门开源项目
查看>>
正则表达式的用法
查看>>
线程安全问题
查看>>
集合的内置方法
查看>>
IOS Layer的使用
查看>>
Android SurfaceView实战 带你玩转flabby bird (上)
查看>>
Android中使用Handler造成内存泄露的分析和解决
查看>>
android代码控制seekbar的样式
查看>>
servlet
查看>>