SQLServer数据表中有两列可空列,均为数值类型,同时在数据库中录入测试数据,Age和Height列均部分有值。
使用SqlSugar的DbFirst功能生成数据库表类,其中Age、Height属性均为可空类型。
当Where函数中的检索条件较多时,运行以下代码时会抛异常,提示语法错误。
List<AppUsers> users=db.Queryable<AppUsers>().Where(r=>(r.UserName=="aaa") && (r.Password=="123") &&
(!r.Age.HasValue || r.Age>20)).Select(r=>new AppUsers { UserName=r.UserName}).ToList();
如果将where函数中的r.Age.HasValue去掉则不会出错。将上述代码生成的SQL语句复制出来,发现最后的非空类型逻辑或操作生成的语句有问题。暂时搞不清楚是否是使用SqlSugar方式不对造成的。
最后的解决办法是将上述代码拆成了两行代码,分别按逻辑或操作的不同条件查询数据。其实也可以手工拼sql语句,然后使用SqlSugar直接执行Sql语句。