在使用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解决方案的更多相关文章

  1. Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案

    Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案,ext 的CheckboxSelectionModel在后台默认选中之后,前台就不允许编辑的bug是存 ...

  2. 为什么我没有拔出钥匙 ——开锁引发的程序bug解决方案的思考

    http://blog.csdn.net/wojiushiwo987/article/details/8851204为什么我没有拔出钥匙                             ——开 ...

  3. jqueryeasyUI dialog 弹出窗口超出浏览器,导致不能关闭的bug解决方案

    jqueryeasyUI dialog 弹出窗口超出浏览器,导致不能关闭的bug解决方案 2014年8月30日 3233次浏览 相信很多前端朋友都用过jqueryeasyUI,jqueryeasyUI ...

  4. modal 弹框遮罩层,滚动穿透bug 解决方案

    modal 弹框遮罩层,滚动穿透bug 解决方案 parent component 动态设置 lock css const computedClassName = classNames( 'activ ...

  5. 小程序输入框闪烁BUG解决方案

    前言 本人所说的小程序,都是基于mpvue框架而上的,因此BUG可能是原生小程序的,也有可能是mpvue的. 问题描述 在小程序input组件中,如果使用v-model进行双向绑定,在输入时会出现光标 ...

  6. geotrellis使用(十三)数据导入BUG解决方案说明

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG说明 解决方案 总结 一.前言         ...

  7. bootstrap的popover插件在focus模式时在Safari浏览器无法使用的bug解决方案

    前言 最近在使用bootstrap的popover插件,效果如下: popover插件的focus模式时表现为当点击按钮时弹出浮动层,在点击浮动层外的任何一处,都隐藏浮动层. 但是在mac下的Safa ...

  8. web标准:img图片在ie6下显示空白的bug解决方案

    在进行页面的DIV+CSS排版时,遇到IE6(当然有时Firefox下也会偶遇)浏览器中的图片元素img下出现多余空白的问题绝对是常见的对于该问题的解决方法也是“见机行事”. 1.将图片转换为块级对象 ...

  9. IE下的bug解决方案

    1.IE6下的双边距bug <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

随机推荐

  1. JS魔法堂:属性、特性,傻傻分不清楚

    一.前言 或许你和我一样都曾经被下面的代码所困扰 var el = document.getElementById('dummy'); el.hello = "test"; con ...

  2. js页面跳转整理(转载未整理)

    js方式的页面跳转1.window.location.href方式    <script language="JavaScript" type="text/java ...

  3. Entity FrameWork 延迟加载的本质(一)

    1.集合的标准查询运算符方法,是来自于System.Linq.Enumerable里给IEnumerable接口添加的扩展方法 2.EF上下文里的DBSet<T>里的标准查询运算符方法,来 ...

  4. linq之into子句

    在Linq表达式中,into子句可以创建一个临时标识符,使用该标识符可以存储group.join或select子句的结果. 下面实例中我们用GroupOtherQuery方法来演示group子句对结果 ...

  5. 重构if...else...或者switch程序块

    我们在开发asp.net时,经常有使用if...else...或者是使用switch来进行多个条件判断.如下面这篇<用户控件(UserControl) 使用事件 Ver2>http://w ...

  6. ex_KMP--Theme Section

    题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110060#problem/B Description It's time f ...

  7. POJ 3233 Matrix Power Series 矩阵快速幂+二分求和

    矩阵快速幂,请参照模板 http://www.cnblogs.com/pach/p/5978475.html 直接sum=A+A2+A3...+Ak这样累加肯定会超时,但是 sum=A+A2+...+ ...

  8. CodeForces 149D Coloring Brackets

    Coloring Brackets time limit per test: 2 seconds memory limit per test: 256 megabytes input: standar ...

  9. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...

  10. asp.net webform 与mvc 共享session

    公司内部系统最早是用.net webform模式开发的,现新项目用.net mvc 开发,现存在的问题就是如何保持原有.net webform的登录状态不变,而在mvc中能够验证用户的登录状态,也就是 ...