0

我一直在尝试研究执行以下操作的最佳方法:

将用户定义的基于文本的表达式保存到数据库中,该数据库概述了要在页面上显示的内容。

例如:“此人的就业状况是 [employment] 雇员,每周 [hours] 小时。”

其中 [employment]、[hours] 对应于数据库中的键/值

例子:

TABLE
ID    KEY             VALUE
1     employment      casual
1     hours           10
2     employment      parttime
2     hours           25

在运行时,此用户定义表达式将用于显示的页面可以访问人员 ID,并且需要从数据库中收集相关详细信息,解析并用检索到的数据替换 [employment]、[hours] 占位符。

例如:“此人的就业状况是临时雇员,每周工作 10 小时。

我正在寻找的解决方案需要足够动态,以处理用户在任意数量的占位符中和周围输入任何静态文本。


编辑以澄清我的意思:

将有一个设置区域,用户可以在其中输入他们希望在屏幕上显示的表达式,该表达式可以是包含数据库中任何“键”值的任何文本。不同的用户将看到他们自己定义的表达式。

另一个例子:“员工工作 [hours] hrs, [employment]”

将显示为:“员工工作 10 小时,休闲”


我的搜索要么不是很好,要么就是不太了解结果。我找到了很多关于 CustomExpressionBuilder、Lambda 表达式、表达式树等的信息,但我很困惑这些信息是否适合我需要做的事情。也许我只是还没有到我的理解是新的!

如果我能得到这个工作,我也希望能够添加一些简单的三元类型功能和/或数学功能。似乎有一个名为NCalc的库可以使这变得非常简单,但是我看不到我最初需要的文本替换要求的示例,或者立即看到一种对其进行调整以使其工作的方法。

感谢您的任何建议,我非常乐意进一步研究,但需要朝着正确的方向努力。

4

1 回答 1

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 参数,就可以将它们替换为适当的值。

于 2012-06-20T15:26:20.057 回答