4.x bug反馈 Where语句中的 第二个带!的条件 ANDNOT 写在了一起 返回
把!这种操作放到第二个条件,如下面的语句
var ids = db.Queryable<bas_accounts>()
.Where(x => x.groupids.Contains(tokenObj.GroupId)&& !SqlFunc.IsNullOrEmpty(x.userids))
.Select(x => x.userids).ToList();
!SqlFunc.IsNullOrEmpty()这句放到&&后面,那么生成出来的sql语句中,AND和NOT,链接在了一起,如下:
SELECT `userids` FROM `bas_accounts` WHERE ((`groupids` like concat('%','0e083e09-2903-4e02-88ed-ff0c5ab86418','%')) ANDNOT( `userids`='' OR `userids` IS NULL ))
把!SqlFunc.IsNullOrEmpty()这句放到第一个条件的话,就没有问题。
不仅是!SqlFunc.IsNullOrEmpty()这种语句,带!的条件都会出现这个问题,如:
var users = db.Queryable<bas_users>().Where(x => needIds.Contains(x.id)&&!x.isdelete).ToList();
必须改成如下语句
var users = db.Queryable<bas_users>().Where(x => !x.isdelete && needIds.Contains(x.id)).ToList();
通过源码调试,我尝试去改动源码,揪出元凶,但是表达式树没接触过,也怕引起其他问题,这个bug美中不足吧,不过这东西还是很NB的,鼓励加油!!!
热忱回答(2)
-
fate stay night VIP0
2017/8/19好的收到了 谢谢你的反馈 今天会更新源码的
0 回复 -
fate stay night VIP0
2017/8/19http://www.donet5.com/Doc/8 按文档一步一步看
0 回复