我编写了一个小方法,可以从字符串构建属性选择器 lambda - 类似于 Dynamic LINQ 所做的以及 Stack Overflow 上的一百万个其他示例。
例如,给定 this Expressions.PropertySelector<Type, PropertyType>("Source.Date")
,如果编译,它会返回一个Func
类似于 this(Type) => type.Source.Date
的 。
无论如何,我遇到了一种情况,我不仅需要选择属性,还需要调用由其类型定义的方法。
因此,例如,我想要与此等效的:(Type) => Type.Source.Date.ToString("Y")
. 我知道我可能可以修改我的PropertySelector
方法以检测方法调用并构建适当的表达式,但我很好奇是否有更好的方法。
对于那些好奇我为什么需要这个的人:基本上它用于我正在构建的实体框架支持的存储库。我有一个方法允许调用者传递一个 lambda 来表示要分组的属性。调用者自己根据用户输入构造 lambda。所以我认为这样做是最好的方法。
但是,例如,如果要分组的属性是DateTime
. 我会对其格式化的字符串进行分组。
处理这种情况的最佳方法是什么?理想情况下,我希望调用者在动态构建表达式后对其进行修改。