Expression 表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
                }
            }
        }

 

以上是关于Expression 表达式的主要内容,如果未能解决你的问题,请参考以下文章

Expression 表达式

表达式树 Expression Trees

[C#] 说说表达式树 - Expression Trees

IIFE(Imdiately Invoked Function Expression 立即执行的函数表达式)

Lamda Expression

java Lambda expression