双子过客

关于自编EF使用变量作为参数返回空指针异常的问题

电脑版发表于:2021/12/10 11:52
//后台EF方法(自编)
public List<T> GetTs<T>(Expression<Func<T, bool>> func=null)
//调用
List<UserInfo> users = eF.GetTs<UserInfo>(a => a.UserName == "张三");
//此时无异常
//但是将条件变为参数之后
ps:
string d="张三";
List<UserInfo> users = eF.GetTs<UserInfo>(a => a.UserName == d);
//此时会返回一个
ConstantExpression right = binaryExpression.Right as ConstantExpression;
//right=null  而且调试可以看到right的NodeType为:MemberAccessException
//但是MemberAccessException是类成员值为空或无权限访问时的一个异常
//所以此时不能通过ConstantExpression 类的方法取到右边参数的值
//解决方法: 把right值模仿left值来取
 MemberExpression memberr = binaryExpression.Right as MemberExpression;//注:不再是ConstantExpression
 var RightValue=Expression.Lambda(memberr).Compile().DynamicInvoke(); //此时 直接取到参数d里面的值 ‘张三’
 //从而生成sql语句 : ‘张三’

判断数据是否为数值类型,便于生成sql语句时判断是否需要添加单引号以保存字符串类型的数据 保证sql语句能正常执行

//判断原理 1.拿到数据的类型 2.通过和数值类型继承的父类进行比较object  num=1;Type typea=num.GetType();
if (!typea.IsClass && !typea.IsInterface && typea.GetInterfaces().Any(a => a == typeof(IFormattable)))
{
   //数据处理                                         
}
 else
{
        //数据处理                                  
}

                

关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢