【极速代码】 2021-06-09 17:25 采纳率: 0%
浏览 141

MemberExpression怎么获取变量的值

我上端传了一个变量:

int smid = 15;
ServersModel sgm = sqlHelper.Query<ServersModel>(s => s.id == smid);

后端二次表达式 base.Visit(node.Right);会跳转到VisitMember方法(MemberExpression只能获取成员的名称)怎么获取这个变量的值:

protected override Expression VisitBinary(BinaryExpression node)
{
    if (node == null)
    {
        throw new ArgumentNullException("BinartExpression");
    }
    //this._stack.Push(")");
    base.Visit(node.Right);
    this._stack.Push(" " + node.NodeType.ToSqlOperator() + " ");
    base.Visit(node.Left);
    //this._stack.Push("(");
    return node;
}

protected override Expression VisitMember(MemberExpression node)
{
    if (node == null)
    {
        throw new ArgumentNullException("MemberExpression");
    }
    this._stack.Push(" " + node.Member.Name + " ");
    return node;
}

最后的sql语句拼接成这样:select * from servers where id =sid

我想要这样的:select * from servers where id = 15

  • 写回答

2条回答 默认 最新

  • 【极速代码】 2021-06-11 15:39
    关注
    protected override Expression VisitMember(MemberExpression node)
            {
                
                if (node == null)
                {
                    throw new ArgumentNullException("MemberExpression");
                }
    
                if (node != null && node.Expression is ParameterExpression)
                {
                    this._stack.Push(" " + node.Member.Name + " ");
                }
                else
                {
                    var f = Expression.Lambda(node).Compile();
                    var value = f.DynamicInvoke();
                    this._stack.Push(" " + value + " ");
                }
                return node;
            }

    我用这种方式解决了

    评论

报告相同问题?