问题描述
public class WorkPackage
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime FromTime { get; set; }
public DateTime ToTime { get; set; }
}
我也将保存的值显示如下(基于FromTime
分组)
最终用户可以
public void MoveWorkPackagetoMonth(WorkPackage wp,int month)
{
....
}
public List<WorkPackage> SplitWorkPackage(WorkPackage wp)
{
....
}
每次用户对 WorkPackage
列表进行大量更改,但出于业务原因,WorkPackage
列表可能每隔几天就会重建一次,并且用户希望在重新创建时执行相同的操作 -创建了 WorkPackage
列表,所以我需要将用户的作品保存在数据库中,以便在重新创建的 WorkPackage
列表上重复相同的作品。
我想添加一些类似脚本语言的东西来将用户作品保存为字符串,如下所示:
"Move(WP1){From(January) To(April)};SPLIT(WP5);"
有什么图书馆可以帮助我吗?或者我必须定义自己的自定义业务语言?(我使用了 .Net4
)
解决方法
NuGet 包 ITVComponents.Scripting.CScript 提供了一个支持解释和编译代码的脚本引擎。 语法源自 JavaScript,带有一些特殊的扩展,以启用动态类型加载和本机脚本部分。 不幸的是,目前没有文档,但我正在处理它..
基本上,对于您想要实现的目标,您可以使用以下代码:
ExpressionParser.ParseBlock(yourScript,yourObject,s => DefaultCallbacks.PrepareDefaultCallbacks(s.Scope,s.ReplSession));
其中 yourObject 将是实现方法 MoveWorkPackageToMonth 的对象, SplitWorkPackage,一种查找包(FindPackage?)和月份 als 整数属性的方法,您的脚本看起来像
MoveWorkPackageToMonth(FindPackage("nameOfPackage1"),April); MoveWorkPackageToMonth(FindPackage("nameOfPackage2"),February); ...
此代码将在解释后工作,因此,如果您要执行大量操作,它可能会很慢。