4.x bug反馈 Where语句中的 第二个带!的条件 ANDNOT 写在了一起 返回

C#论坛 老数据
2 3175
该叫什么 Null 发布于2017/8/18
悬赏:0 飞吻

把!这种操作放到第二个条件,如下面的语句

 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