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=& ...
随机推荐
- SQL Server里ORDER BY的歧义性
在今天的文章里,我想谈下SQL Server里非常有争议和复杂的话题:ORDER BY子句的歧义性. 视图与ORDER BY 我们用一个非常简单的SELECT语句开始. -- A very simpl ...
- 【HTML5】Canvas 实现放大镜效果
图片放大镜 效果 在线演示 源码 原理 首先选择图片的一块区域,然后将这块区域放大,然后再绘制到原先的图片上,保证两块区域的中心点一致, 如下图所示: 初始化 <canvas id=&qu ...
- 【Android进阶系列教程】前言
起因 因为初学Android的时候还没有写博客的意识,现在Android的门是入了,正在进阶的道路上行走,但是就这一路也走了不少的弯路.我想,总得来说Android入门还是比较容易的,网络资源比较丰富 ...
- 二、中间件(middleware)
1. 中间件(middleware) Django中的中间件主要实现一些附加功能,在request被用户handler处理前,以及用户handler处理后生存的response进行处理.因此 ...
- Requested registry access is not allowed(不允许所请求的注册表访问权)
尝试创建自定义事件日志时,将会收到“Requested registry access is not allowed(不允许所请求的注册表访问权)”错误消息 EventLog.CreateEventS ...
- Python基础:序列
一.概述 序列类型(Sequence Types)类似于C中的数组,它是包含一组成员的连续列表,这些成员紧邻排列,并且可以通过序号(下标偏移量)访问其中的一个或多个成员.序列类型的示意图如下所示: P ...
- WPF后台设置xaml控件的样式System.Windows.Style
WPF后台设置xaml控件的样式System.Windows.Style 摘-自 :感谢 作者: IT小兵 http://3w.suchso.com/projecteac-tual/wpf-zhi ...
- SQL Server 性能调优(一)——从等待状态判断系统资源瓶颈【转】
转载自:http://blog.csdn.net/dba_huangzj/article/details/7607844#comments 通过DMV查看当时SQL SERVER所有任务的状态(sle ...
- MyEclipse8.6安装SVN 教程 与遇到的问题
按网上的多种方式都不好用 最后这种好用 了! 写此文做记录. MyEclipse版本:8.6 SVN版本:1.6.9 MyEclipse版本要对应SVN版本.否则会出错. 教程: 1.下载最新 ...
- Java生成公私钥对
public static synchronized KeyPair generateRSAKeyPair(int keysize, BigInteger publicExponent) { try ...