【发布时间】:2018-07-19 11:40:47
【问题描述】:
是否可以通过反射自动执行这些映射?
我有一个简单的列映射:
var columnsMap = new Dictionary<string, Expression<Func<Industry, object>>>
{
["id"] = v => v.Id,
["name"] = v => v.Name,
["isActive"] = v => v.IsActive
};
columnsMap 运行时结果:
我想在包装类中自动化这些映射:
public class QueryColumnMapper<T> : Dictionary<string, Expression<Func<T, object>>>
{
public QueryColumnMapper<T> GenerateMappings()
{
foreach (var item in typeof(T).GetProperties())
{
// get dictionary key ======> its OK
var name = Char.ToLowerInvariant(item.Name[0]) + item.Name.Substring(1); //camel-case name
// get expression =======> this is the problem. wrong way
Expression<Func<T, object>> exp = v => v.GetType().GetProperty(item.Name);
//Expression<Func<T, object>> exp = v => v.?????; <-----
// add to mapper object
this.Add(name, exp);
}
return this;
}
}
使用这个类的例子:
var columnsMap = new QueryColumnMapper<Industry>().GenerateMappings();
我不知道是否可以在运行时动态获取我的表达式?
(我正在使用此映射字典在实体框架IQueryable 查询上应用过滤。第一个示例(手动映射)它可以工作,但我不知道如何在没有手动映射的情况下在运行时执行此操作)
【问题讨论】:
-
this is the problem是什么错误? -
您希望它与 Enttiy 框架一起使用吗?请edit你的问题并解释你到底想要完成什么,因为这听起来像XY problem
-
我编辑了这篇文章。谢谢
-
@thehennyy 问题是我做错了方式......它不起作用,因为我不想在 columnsMap 中获得第二个结果..
-
@CamiloTerevinto 我想要像我的手动映射字典那样的对象映射,而不是属性值
标签: c# entity-framework reflection .net-core expression-trees