首页 > 其他 > 详细

Expression 表达式

时间:2017-09-09 21:30:59      阅读:241      评论:0      收藏:0      [点我收藏+]

在使用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();
                }
            }
        }

 

Expression 表达式

原文:http://www.cnblogs.com/zhongwd/p/7499303.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!