 分类:
    .NET
    
    分类:
    .NET
希望能带给大家一些想法,碰撞出属于你的火花, 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

好啦,动态创建表达式就好了,但是官方的太不友好了,就可以用 别人做好的轮子来进行引用,但是理解了这篇文章,引用别人的就不会太难理解了
 关机下班啦
关机下班啦
 50010702506256
50010702506256
         
         
         
         
        