【问题标题】:How to iterate through a DataTable in WWF?如何遍历 WWF 中的 DataTable?
【发布时间】:2014-08-27 01:03:49
【问题描述】:

探索 WWF 我在处理DataTable 时遇到了困难。假设我有一个表,我想根据该表中每一行的数据进行一些计算。为此,我将添加CodeActivity 作为我工作流程的第一步,它将读取该表并使用数据填充DataTable(将作为工作流程的私有字段存储)。我想之后我会使用ReplicatorActivity(正如MSDN建议的那样作为foreach循环的替代品)来遍历数据,并且它会有另一个CodeActivity,它将根据行的数据进行所有计算.问题是ReplicatorActivity 只能遍历System.Collections.IList,但我们知道System.Data.DataTable.RowsDataRowCollection 类型,它实现ICollectionIEnumerableInternalDataCollectionBase,但不是IList

  • 您有什么建议?在这种情况下,我应该使用WhileActivity 而不是ReplicatorActivity,还是使用其他方法?
  • 我应该在一个长时间运行的CodeActivity 中完成所有计算吗?

【问题讨论】:

  • 一开始不使用 DataTable 会怎样?他们在框架的早期就有了自己的位置,但使用起来非常糟糕。
  • @DanielKelley 那么任何应该使用的建议将不胜感激。
  • @Jyrkka :如果提供的答案对您有帮助,请将答案标记为正确答案,否则请提供更多详细信息。

标签: c# datatable workflow-foundation


【解决方案1】:

从您所描述的情况来看,单个 CodeActivity 可以简单地处理业务。查看以下代码并构造如下所示:

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;
    }
}

根据您的问题描述,上述方法非常简单且可重复使用

【讨论】:

  • 在开始学习构建新活动之前,我试图了解如何使用 WF 的内置插件,此外,同样的任务可以通过简单的 CodeActivity 或使用 @ 来完成987654323@ 和 IEnumerator(同样,存储为工作流的私有字段)在表中运行,我只是试图了解如何使用 ReplicatorActivity 来完成此操作。
  • ReplicatorActivity 类在 .NET 4.5 中已过时,您不应再使用它。在 WF 4.5 中,变量和参数在运行时进行管理,内置活动可以访问它们,但在 WorkFlow 3.5 中并非如此,您必须创建自定义活动来复制实例数据。如果您想坚持使用 .NET 4.5 或更高版本,我的建议是不要使用 ReplicatorActivity。
  • 目前我的目标是3.5
猜你喜欢
  • 2010-12-18
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
相关资源
最近更新 更多