首页 新闻 赞助 找找看

动态构建一个lambda表达式

0
[已解决问题] 解决于 2016-04-10 10:12
        public string GetWhere()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("1=1");
            if (!string.IsNullOrEmpty(username))
            {
                sb.Append(string.Format(" and UserName='{0}'", username));
            }
            if (!string.IsNullOrEmpty(pwd))
            {
                sb.Append(string.Format(" and pwd='{0}'", pwd));
            }
            return sb.ToString();
        }

以上是动态获取到一个字符串,如何改成一个方法,让他动态返回一个lambda表达式,用于对对一个List<UserInfor> list 进行数据筛选。

蜡笔小新111的主页 蜡笔小新111 | 初学一级 | 园豆:6
提问于:2016-04-09 16:53
< >
分享
最佳答案
1
static Expression<Func<UserInfo, bool>> GetWherePredicate(string name, string pwd)
        {
            var p = Expression.Parameter(typeof(UserInfo), "p");
            var expr1 = Expression.Equal(Expression.Constant(1), Expression.Constant(1));
            if (!string.IsNullOrEmpty(name))
            {
                var expr2 = Expression.Equal(Expression.Property(p, "Name"), Expression.Constant(name));
                expr1 = Expression.And(expr1, expr2);
            }
            if (!string.IsNullOrEmpty(pwd))
            {
                var expr3 = Expression.Equal(Expression.Property(p, "Password"), Expression.Constant(pwd));
                expr1 = Expression.And(expr1, expr3);
            }
            var expr4 = Expression.Lambda<Func<UserInfo, bool>>(expr1, p);
            return expr4;
        }

调用:

var predicates = GetWherePredicate("jello", "123456");
var filter = list.Where(predicates.Compile());

奖励园豆:5
jello chen | 大侠五级 |园豆:7306 | 2016-04-10 00:45
其他回答(1)
0

就算返回.返回的也是委托.而不是lambda表达式.

可以通过构造表达数树来实现你的目标.

没见过你这样用的.linq已经把这样全都做了.你只要学会怎么用linq就行了.不要费这种功夫.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-04-09 18:01

这是要调用的的方法:

public void GetList(Expression<Func<T, bool>> whereLambda)

{

 

}

lambda要动态生成,明白吗?

 

支持(0) 反对(0) 蜡笔小新111 | 园豆:6 (初学一级) | 2016-04-09 18:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册