返回基于Newexpression的匿名类型的泛型类实例

时间:2017-02-26 12:34:52

标签: c# generics lambda anonymous-types

我有通用类" 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">();

    }

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

该方法将在下面调用

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

我自己试了8个小时但没有运气。

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

请帮忙

谢谢

2 个答案:

答案 0 :(得分:0)

你可以这样做。

{{1}}

答案 1 :(得分:0)

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

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

    return new MsAccessQueryBuilder<TResult>();

}