我正在尝试以动态方式定义需要应用于报表中数据的条件规则。我想要的是允许最终用户在配置中指定条件,然后在运行报告时编译和执行。
现在如果在代码中完成,我会有类似下面的代码。
public int showTopEntries{get; set;}
. . . .
showTopEntries = showTopEntries >= totalEntries ? totalEntries : showTopEntries;
但是,因为我希望用户在文本文件中提供此规则,在代码中读取和翻译它。如何将表格的字符串(下面)解析到上面的陈述中?
PropertyToSet =“showTopEntries”Condition =“showTopEntries> = totalEntries”ifTrue =“totalEntries”ifFalse =“showTopEntries”
最终,我希望用户能够以
的形式定义规则<IfCondition>
<WhenTrue><\WhenTrue>
<WhenFalse>
<IfCondition>
<WhenTrue>
<IfCondition>
. . . . .
<\IfCondition>
<\WhenTrue>
<\IfCondition>
<\WhenFalse>
<\IfCondition>
基本上,如果我有一个对象
公共类PersonDetail { public String Name {get;组;} public String Description {get;组;} public String Age {get;组;} public Boolean Alive {get;组;} 公共MaritalStatus MaritalStatus {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;
}
}
}
提前感谢您的建议。
答案 0 :(得分:1)
查看Dynamic LINQ,它提供的扩展程序可让您将string
传递给Where(string)
扩展程序,并为您动态构建谓词:
string filter = MyConfig.GetString("Condition");
// filtered string is "Condition ="showTopEntries >= totalEntries"
var filtered = dataSource.Where(filter);