我一直在尝试创建一个表达式,它可以将强类型的 EF Core 实体投影到一个动态对象中,该对象包含一个在运行时使用 REST API 调用定义的列表。
这是我到目前为止所拥有的:
Expression<Func<Message, dynamic>> DynamicFields(IEnumerable<string> fields)
{
var xParameter = Expression.Parameter(typeof(Message), "o");
var xNew = Expression.New(typeof(ExpandoObject));
var bindings = fields.Select(o => {
var mi = typeof(Message).GetProperty(o);
var xOriginal = Expression.Property(xParameter, mi);
return Expression.Bind(mi, xOriginal);
});
var xInit = Expression.MemberInit((dynamic)xNew, bindings);
return Expression.Lambda<Func<Message, dynamic>>(xInit, xParameter);
}
感觉就像我非常接近,但这在运行时会爆炸,说明 X 属性不是 ExpandoObject 的成员。我尝试改变动态和 ExpandoObject 的使用,但似乎没有任何效果 - 这甚至可能吗?
如果我为 Message 切换出 dyanmic / ExpandoObject,它工作得很好,但会返回 Message 类的一个实例,其所有属性都为默认值。
以前有人做过吗?
www说
莫回无
相关分类