【发布时间】:2019-03-05 08:55:20
【问题描述】:
在C# 项目中,我想创建一个扩展,该扩展将采用属性名称列表并创建一个动态选择查询。
我发现magic Gist 似乎正是这样做的。但是,var lambda = ... 不断抛出以下错误
Lambda 类型参数必须从 System.Delegate 派生
这里是代码
public static IQueryable<dynamic> ToDynamic<T>(this IQueryable<T> query, IEnumerable<String> fields)
{
var pocoType = typeof(T);
var itemParam = Expression.Parameter(pocoType, "x");
var members = fields.Select(f => Expression.PropertyOrField(itemParam, f));
var addMethod = typeof(IDictionary<string, object>).GetMethod(
"Add", new Type[] { typeof(string), typeof(object) });
var elementInits = members.Select(m => Expression.ElementInit(addMethod, Expression.Constant(m.Member.Name), Expression.Convert(m, typeof(object))));
var expando = Expression.New(typeof(ExpandoObject));
var lambda = Expression.Lambda<Expression<Func<T, dynamic>>>(Expression.ListInit(expando, elementInits), itemParam);
return query.Select(lambda.Compile());
}
我该如何纠正这个错误?
【问题讨论】:
-
谷歌它。很简单:iamabhik.wordpress.com/tag/…