LightSpeed 的Left Join Bug解决方案
在使用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_StudentApply>("LQ_SchoolId") == SchoolId,
Order = Order.By("CreatedOn").Descending()
};
//通过OuterJoin来处理Left Join和Right Join
query2.Join = Join.Outer(typeof(LQ_StudentApply), typeof(LQ_Member), "Operator", "Id");
var rst1 = dbPlatform.Find(query2, query2.Mappings);
var saList = rst1.GetCollection<LQ_StudentApply>();
var oList = rst1.GetCollection<LQ_Member>(); //Inner Join
query2.Join = Join.Inner(typeof(LQ_StudentApply), typeof(LQ_Member), "LQ_MemberId", "Id");
var rst2 = dbPlatform.Find(query2, query2.Mappings);
var memList = rst2.GetCollection<LQ_Member>(); //拼合三个表的数据
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 SA
LEFT JOIN LQ_Member M ON SA.Operator = M.Id
INNER JOIN LQ_Member MEM ON SA.LQ_MemberId = MEM.Id
WHERE SA.LQ_SchoolId = 'SchoolId'
ORDER BY SA.CreatedOn DESC
LightSpeed 的Left Join Bug解决方案的更多相关文章
- Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案
Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案,ext 的CheckboxSelectionModel在后台默认选中之后,前台就不允许编辑的bug是存 ...
- 为什么我没有拔出钥匙 ——开锁引发的程序bug解决方案的思考
http://blog.csdn.net/wojiushiwo987/article/details/8851204为什么我没有拔出钥匙 ——开 ...
- jqueryeasyUI dialog 弹出窗口超出浏览器,导致不能关闭的bug解决方案
jqueryeasyUI dialog 弹出窗口超出浏览器,导致不能关闭的bug解决方案 2014年8月30日 3233次浏览 相信很多前端朋友都用过jqueryeasyUI,jqueryeasyUI ...
- modal 弹框遮罩层,滚动穿透bug 解决方案
modal 弹框遮罩层,滚动穿透bug 解决方案 parent component 动态设置 lock css const computedClassName = classNames( 'activ ...
- 小程序输入框闪烁BUG解决方案
前言 本人所说的小程序,都是基于mpvue框架而上的,因此BUG可能是原生小程序的,也有可能是mpvue的. 问题描述 在小程序input组件中,如果使用v-model进行双向绑定,在输入时会出现光标 ...
- geotrellis使用(十三)数据导入BUG解决方案说明
Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG说明 解决方案 总结 一.前言 ...
- bootstrap的popover插件在focus模式时在Safari浏览器无法使用的bug解决方案
前言 最近在使用bootstrap的popover插件,效果如下: popover插件的focus模式时表现为当点击按钮时弹出浮动层,在点击浮动层外的任何一处,都隐藏浮动层. 但是在mac下的Safa ...
- web标准:img图片在ie6下显示空白的bug解决方案
在进行页面的DIV+CSS排版时,遇到IE6(当然有时Firefox下也会偶遇)浏览器中的图片元素img下出现多余空白的问题绝对是常见的对于该问题的解决方法也是“见机行事”. 1.将图片转换为块级对象 ...
- IE下的bug解决方案
1.IE6下的双边距bug <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
随机推荐
- .NET ORM 哪家强
ORM到底哪家强? 很多人都想知道这个问题,自已也没测试过,只能道听途说. 闲的无聊就将几个ORM拿出来比一比,假如怀疑测试代码有问题可以将它下载下来慢慢研究. 参赛ORM 1.SqlSugar:是一 ...
- QCustomplot使用分享(三) 图
一.可以实现的图 相对于其他绘制图表的第三方库来说,QCustomPlot算是比较轻量的,不仅仅能实现功能,而且二次开发比较容易.下面我们来具体说下他可以实现那些图 QCPGraph:折线图,Line ...
- ASP.NET MVC5--Contains
前言: * The Contains method is run on the database, not the c# code above. On the database, Contains ...
- 微软参考源代码 referencesource.microsoft.com
微软参考源代码 http://referencesource.microsoft.com/ referencesource 下载地址 https://github.com/Microsoft/refe ...
- appt查看apk信息
aapt dump badging app-debug.apk
- HTML—one
1.我们做一个完整的网页,要做三个部分 前端部分:Html(是一种超文本标记语言,网页)+css(网页外观)+js(执行动作,特效) 数据库:sqlserver 动态部分:.net(平台),c#(语言 ...
- 重新想象 Windows 8.1 Store Apps (93) - 控件增强: GridView, ListView
[源码下载] 重新想象 Windows 8.1 Store Apps (93) - 控件增强: GridView, ListView 作者:webabcd 介绍重新想象 Windows 8.1 Sto ...
- [PE结构分析] 7.相对虚拟地址(RVA)和文件偏移间的转换
RVA是相对虚拟地址(Relative Virtual Address)的缩写.RVA是当PE 文件被装载到内存中后,某个数据位置相对于文件头的偏移量. 例如:导入表的位置和大小可以从PE文件头中IM ...
- PHP json编码遇到的问题
今天遇到了json编码解码之后中文消失的问题,一探究竟,写下这篇文章 PHP中提供了json_encode 和json_decode 这对函数 将PHP中 值转化成 字符串,但是遇到中文的时候,很容 ...
- ThreadLocal,Java中特殊的线程绑定机制
在DRP项目中,我们使用了ThreadLocal来创建Connection连接,避免了一直以参数的形式将Connection向下传递(传递connection的目的是由于jdbc事务要求确保使用同一个 ...