我正在尝试一种动态方式来定义需要应用于报告中数据的条件规则。我想要的是允许最终用户在配置中指定条件,然后在运行报告时编译和执行。
现在,如果在代码中完成,我会得到类似下面的代码。
public int showTopEntries{get; set;}
. . . .
showTopEntries = showTopEntries >= totalEntries ? totalEntries : showTopEntries;
但是,由于我希望用户在文本文件中提供此规则,在该文件中以代码的形式读取和翻译该规则。请问如何将表单(下面)的字符串解析为上面的语句?
PropertyToSet="showTopEntries" 条件="showTopEntries >= totalEntries" ifTrue="totalEntries" ifFalse="showTopEntries"
最终,我希望用户在表单中定义规则
<IfCondition>
<WhenTrue><\WhenTrue>
<WhenFalse>
<IfCondition>
<WhenTrue>
<IfCondition>
. . . . .
<\IfCondition>
<\WhenTrue>
<\IfCondition>
<\WhenFalse>
<\IfCondition>
基本上,如果我有一个对象
公共类 PersonDetail { 公共字符串名称 {get; 设置;}公共字符串描述{get; 设置;}公共字符串年龄{get; 设置;}公共布尔活{get; 设置;}公共婚姻状态婚姻状态{得到;设置;}公共地址地址{get; 放;} }
我需要使用以下表达式对名称进行条件替换,比如子字符串
public static class DetailExtender
{
public static void EvaluateConditionalFieldRule(this PersonDetail Detail, String PropertyToEvaluate, String ConditionalExpression, List<String> parameters, String IfTrue, String ifFalse)
{
var property = Detail.GetType().GetProperties().Where(x=>x.Name == PropertyToEvaluate);
if (property == null)
throw new InvalidDataException("Please specify a valid Detail property name for the evaluation.");
//put together the condition like so
if (Detail.AsQueryable().Where(ConditionalExpression, parameters).Count() > 0)
{
// property.Value = IfTrue;
}
else
{
property.Value = ifFalse;
}
}
}
提前感谢您的建议。