Return 具有基于 Newexpression 的匿名类型的泛型 class 实例

Return the generic class instance with anonymous type based on Newexpression

我有通用的 class "MSAccessQueryBuilder",方法如下

public I_QueryBuilder<T> Select(Expression<Func<T, object>> fieldNames)
    {
        NewExpression nEx = (NewExpression)fieldNames.Body;
        MsAccessQueryBuilder<"Anonymous Type Of Expression"> x = new MsAccessQueryBuilder<"Anonymous Type Of Expression">();

    }

在方法中,我需要使用在 lambda 表达式中匿名创建的泛型类型创建 "MSAccessQueryBuilder" 的实例。

该方法将像下面这样调用

x.Select(s=> new {p1 = s.user_id,p2 = s.user_name})

我自己尝试了 8 个小时,但没有成功。

是否可以从 NewExpression 或 LambdaExpression 获取匿名类型并创建该匿名类型class的泛型实例

请帮忙

谢谢

你可以这样做。

var genericType = typeof(MsAccessQueryBuilder<>);
var specificType = genericType.MakeGenericType(typeof(nEx));
var x = Activator.CreateInstance(specificType);

必须将方法签名更改为 Func 委托 return 类型为泛型而不是对象解决了问题

public I_QueryBuilder<TResult> Select(Expression<Func<T, TResult>> fieldNames)
{

    return new MsAccessQueryBuilder<TResult>();

}