【发布时间】:2018-08-29 05:21:28
【问题描述】:
假设我们有一个名为 TOTAL 的变量,它应该替换为 CClass 的 AProperty + BProperty。 我有一组 IQueryrable 的 CClass 对象,我想从这个集合中选择 (TOTAL + AProperty)。
AProperty 和 BProperty 是双精度值。我不想扩展我的类,因为它是我的数据库中的一个实体类,实际上 TOTAL 表达式是一个运行时、用户定义的变量。所以我不想通过反射或其他一些解决方案注入它们。我想让最终用户能够声明一些类似 MACRO 的变量,以基于它们创建更复杂的表达式。
有什么方法可以根据上述情况为我的解释器定义 TOTAL 表达式?
【问题讨论】:
-
“替换”是什么意思?你能用代码举例吗?
-
我需要在 IQueryable 集上运行动态表达式。它是一组 CClass 类型,该类型有两个属性,称为 AProperty 和 BProperty。我需要定义一些预定义的表达式;例如作为表达式的 TOTAL 变量:(AProperty + BProperty)。所以当我在我的选择表达式中输入“TOTAL + AProperty”作为输入表达式时,它应该被计算为“AProperty + BProperty + BProperty”。事实上,TOTAL变量本身就是一个表达式。它就像一个保留变量是一个表达式。
-
为什么必须是表达式?听起来像一个显式的属性获取器就足够了。喜欢:
{ return AProperty + BProperty; }您可以使用部分关键字扩展您的CClass。您希望计算在服务器上而不是在内存中进行吗? -
AProperty和BProperty是什么类型? -
AProperty 和 BProperty 是双精度值。我不想扩展我的类,因为它是我的数据库中的一个实体类,实际上 TOTAL 表达式是一个运行时、用户定义的变量。所以我不想通过反射或其他一些解决方案注入它们。我想让最终用户能够声明一些类似 MACRO 的变量,以基于它们创建更复杂的表达式。
标签: c# .net linq dynamic-expresso