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>();
}
我有通用的 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>();
}