C# 如何在WWF中迭代数据表?
探索WWF我在处理数据表时遇到了困难。假设我有一个表,我想根据该表中每一行的数据进行一些计算。为此,我将添加一个CodeActivity作为工作流中的第一步,该步骤将读取该表并填充一个DataTable,该DataTable将存储为工作流的私有字段。我想之后我会使用ReplicatorActivity,正如MSDN所建议的那样,作为foreach循环的替代品,用于迭代数据,它将有另一个CodeActivity,它将根据行的数据进行所有计算。问题是ReplicatorActivity只能通过System.Collections.IList进行迭代,但我们知道System.Data.DataTable.Rows属于DataRowCollection类型,它通过InternalDataCollectionBase实现ICollection和IEnumerable,而不是IList 你有什么建议?在这种情况下,我应该使用WhileActivity而不是ReplicatorActivity,还是其他方法? 我应该在一个长时间运行的CodeActivity中完成所有计算吗?C# 如何在WWF中迭代数据表?,c#,datatable,workflow-foundation,C#,Datatable,Workflow Foundation,探索WWF我在处理数据表时遇到了困难。假设我有一个表,我想根据该表中每一行的数据进行一些计算。为此,我将添加一个CodeActivity作为工作流中的第一步,该步骤将读取该表并填充一个DataTable,该DataTable将存储为工作流的私有字段。我想之后我会使用ReplicatorActivity,正如MSDN所建议的那样,作为foreach循环的替代品,用于迭代数据,它将有另一个CodeActivity,它将根据行的数据进行所有计算。问题是ReplicatorActivity只能通过Sys
根据您所描述的单个代码,活动可以简单地处理业务。查看以下代码并构造如下内容:
public sealed class TableManipulationActivity : CodeActivity<DataTable>
{
[Required]
public InArgument<DataTable> TableInArgument { get; set; }
private DataTable _table;
protected override DataTable Execute(CodeActivityContext context)
{
_table = TableInArgument.Get(context);
// play with _table value and do whatever you want [All sorts of CRUD operations]
var result = new DataTable(); // populate this result
// Manipulate result
// ...
// ...
return result;
}
}
根据您的问题描述,上述方法非常简单且可重复使用。首先不使用DataTable怎么样?他们早在框架的早期就有了自己的位置,但使用起来非常糟糕。@DanielKelley,那么我们将非常感谢您提出的任何建议。@Jyrkka:如果提供的答案对您有帮助,请将答案标记为正确答案,否则请提供更多详细信息。在开始学习构建新框架之前活动,我试图了解如何使用WF的内置功能,此外,同样的任务也可以通过简单的CodeActivity或再次利用IEnumerator的WhileActivity来完成,存储为工作流的私有字段以在表中运行,我只是试图理解如何使用ReplicatorActivity来实现这一点。ReplicatorActivity类在.NET 4.5中已经过时,您不应该再使用它。变量和参数在WF 4.5的运行时进行管理,内置活动可以访问它们,但工作流3.5的情况并非如此,在工作流3.5中,您必须创建自定义活动来复制实例数据。如果你想坚持使用.NET 4.5或更高版本,我的建议是不要使用ReplicatorActivity。目前我的目标是3.5