Sorry 我没说明白!  我需要把这个c=>c.age==age  在DAL层转成  正常的sql语句   where age=12   

解决方案 »

  1.   

    参考
    http://www.cnblogs.com/hanyinglong/archive/2012/05/16/2505431.html
      

  2.   

    可以用ExpressionVisitor来修改表达式。比如下面的例子在MemberExpression可以求值的时候,把它简化为ConstantExpression。
    public void Say(Expression<Func<Form1, bool>> where)
    {
        //这里取值
        //string hello = where.Body.ToString();    var exp = new MyExpressionVisitor().Visit(where) as LambdaExpression;
        string hello = exp.Body.ToString();  // (c.age==12)
    }class MyExpressionVisitor : ExpressionVisitor
    {
        protected override Expression VisitMember(MemberExpression node)
        {
            if (node.Expression is ConstantExpression)
            {
                object obj = (node.Expression as ConstantExpression).Value;
                if (node.Member is FieldInfo)
                {
                    var value = (node.Member as FieldInfo).GetValue(obj);
                    return Expression.Constant(value, node.Type);
                }
                else if (node.Member is PropertyInfo)
                {
                    var value = (node.Member as PropertyInfo).GetValue(obj);
                    return Expression.Constant(value, node.Type);
                }
            }
            return base.VisitMember(node);
        }
    }
      

  3.   

    http://www.cnblogs.com/hanyinglong/archive/2012/05/16/2505431.html 
    学习这个吧