Expression 表达式

在使用EF使用Linq查询时,有些复杂的查询条件不能直接写Lambda表达式简单的拼装条件。

如 查询条件是有一组 like条件拼装,这时就要用到Expression表达式,下面直接上代码

 public List<City> GetCitys(string[] areaCodes)
        {
            var type = typeof(City);
            var pe = Expression.Parameter(type);
            var property = type.GetProperty("AreaCode");
            var leftProgramArea = Expression.Property(pe, property);
            var stringType = typeof(string);
            MethodInfo mi = stringType.GetMethod("StartsWith", new Type[] { typeof(string) });
            List<MethodCallExpression> methodCalls = new List<MethodCallExpression>();
            Expression<Func<City, bool>> whereLamda = null;
foreach (var area in areaCodes) { var right = Expression.Constant(area, stringType); var call = Expression.Call(leftProgramArea, mi, right); methodCalls.Add(call); }
if (methodCalls.Count == 1) { whereLamda = Expression.Lambda<Func<City, bool>>(methodCalls[0], pe); } else {
if (methodCalls.Count > 1) { var be = Expression.Or(methodCalls[0], methodCalls[1]); for (var i = 2; i < methodCalls.Count; i++) { be = Expression.Or(be, methodCalls[i]); } whereLamda = Expression.Lambda<Func<City, bool>>(be, pe); } using (var ctx = new MyContext()) { return ctx.Citys.Where(whereLamda).ToList(); }
} }

 

转载于:https://www.cnblogs.com/zhongwd/p/7499303.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值