我一直在尝试研究以下方法的最佳方法:
将用户定义的基于文本的表达式保存到数据库中,该数据库概述了要在页面上显示的内容。
例如:“这个人的就业状况是[就业]员工,[小时]每周一次。”[就业],[小时]对应数据库中的键/值
示例:
TABLE
ID KEY VALUE
1 employment casual
1 hours 10
2 employment parttime
2 hours 25
在运行时,这个用户定义的表达式将用于显示的页面可以访问个人ID,并需要从数据库中收集相关详细信息,解析并替换[jobs],[hours]占位符检索数据。
例如:“这个人的就业状况是一名临时雇员,每周10小时。
我正在寻找的解决方案需要足够动态,以便处理用户在任意数量的占位符中输入任何静态文本。
<小时/> 编辑澄清我的意思:
将有一个设置区域,用户可以在其中输入所需的表达式 显示在屏幕上,可以是包含任何“键”值的任何文本 数据库。不同的用户将看到他们自己定义的表达式。
另一个例子:“员工工作时间[小时],[就业]”
将显示为:“员工工作10小时,随意”
<小时/> 我要么对我的搜索做得不好,要么就是不能很好地理解结果。我发现了很多关于CustomExpressionBuilder,Lambda表达式,表达式树等的信息,我很困惑这些是否是我需要做的正确的轨道。也许我还没有在我的理解中对此有所了解!
如果我能够实现这一点,我也希望能够添加一些简单的三元类型功能和/或数学功能。似乎有一个名为NCalc的库可以使这很简单,但我看不到我最初需要的文本替换要求的示例,或者立即看到一种方法来调整它的工作。
感谢您的任何建议,我非常乐意进一步研究,但需要朝着正确的方向努力。
答案 0 :(得分:0)
从您的问题来看,您对这个问题的解决程度有点模糊,即您是否已经能够从数据库中检索所有值。
如果你只是试图像上面提到的那样构建一个字符串表达式,一旦你有了上面的值,我可能会使用String.Format或者字符串构建器。
例如,如果我们假设您拥有数据库中的值并且它们包含在Person类的属性中(仅作为示例),您可以写一些效果:
var message = String.Format("The employment status of this person is a {0} employee, {1} hrs a week.", person.Employment, person.Hours);
就像我说的那样,你的问题确切地说你的问题在哪里有点模糊,但是如果你只是想在构建了一个特定的表达式,那么上面就可以了。您可以将person.Employment和person.Hours参数替换为具有相应值的参数。