【发布时间】:2013-02-02 14:08:58
【问题描述】:
我编写了一个小方法,可以从字符串构建属性选择器 lambda - 类似于 Dynamic LINQ 所做的以及 Stack Overflow 上的一百万个其他示例。
例如,给定这个Expressions.PropertySelector<Type, PropertyType>("Source.Date"),如果编译,它将返回一个Func,类似于这个(Type) => type.Source.Date。
无论如何,我遇到了一种情况,我不仅需要选择属性,还需要调用由其类型定义的方法。
例如,我想要这样的等价物:(Type) => Type.Source.Date.ToString("Y")。我知道我可能可以修改我的 PropertySelector 方法来检测方法调用并构建适当的表达式,但我很好奇是否有更好的方法。
对于那些好奇我为什么需要它的人:基本上它用于我正在构建的实体框架支持的存储库。我有一个方法允许调用者传递一个 lambda 来表示要分组的属性。调用者自己根据用户输入构造 lambda。所以我认为这样做是最好的方法。
但是,例如,如果要分组的属性是 DateTime。我会对其格式化的字符串进行分组。
处理这种情况的最佳方法是什么?理想情况下,我希望调用者在动态构建表达式后对其进行修改。
【问题讨论】:
-
调用者究竟会如何修改它?你知道方法的名称只是一个字符串吗?还是在编译时就知道了?
-
@svick 我知道编译时方法的名称。但我也很好奇,如果我把它作为一个字符串来完成。
标签: c# .net entity-framework lambda expression-trees