希望能带给大家一些想法,碰撞出属于你的火花, EF动态条件查询之前我们先看看原始查询条件类型吧
一般查询是这样的
var UserData = mas.UserInfor.Where(t => t.UserName == "").ToList();
我们看看 Where 的条件进入到系统底层它的值类型是这个样子的 Expression<Func<TSource, bool>> predicate
重点 TSource 这个是我们的表名称
然后,我们可以尝试这样改查询条件
然后我们调用的时候就可以这样了
这样 我们查询的时候就很灵活了,不管以后你查哪张表我们都可以很灵活的代入条件
有的人可能想到用 if 去判断累加条件
这样不觉得麻烦吗?
实在是难看看了好久才明白
第一步
ParameterExpression pe = Expression.Parameter(typeof(UserInfor), "company"); 根据我们的实体创建
生成表达式 1
Expression left = Expression.Property(pe, typeof(UserInfor).GetProperty("UserName"));
Expression right = Expression.Constant("张胜男");
Expression e1 = Expression.Equal(left, right);
生成表达式 2
left = Expression.Property(pe, typeof(UserInfor).GetProperty("PassWord"));
right = Expression.Constant(PassWord);
Expression e2 = Expression.Equal(left, right);
然后把两个表达式合成
var ea = Expression.AndAlso(e1, e2);
然后转成我们需要的表达式
expression = Expression.Lambda<Func<UserInfor, bool>>(ea, pe);
//传入我们的初始放方法里面
UserInfor userInfor = userInfoDAL.GetUser(expression);
上个GIF
好啦,动态创建表达式就好了,但是官方的太不友好了,就可以用 别人做好的轮子来进行引用,但是理解了这篇文章,引用别人的就不会太难理解了
关机下班啦