2

我有一个 excel 工作簿,其中包含多个具有相同数据模式的工作表。我有工作实现从单张加载数据。

有没有办法使用 JoinOperation 或任何此类操作将相似的记录(模式)合并到一个集合(行)中?

我的理解是 JoinOperation 可用于左、右、外和内连接,但不能用于联合,因为 MergeRows 的返回类型是 Row。

提前致谢。

4

1 回答 1

3

您可以实现AbstractOperation组合多个输入操作,如下所示:

public class UnionAllOperation : AbstractOperation     {
    private readonly List<IOperation> _operations = new List<IOperation>(); 

    public override IEnumerable<Row> Execute(IEnumerable<Row> rows)
    {
        foreach (var operation in _operations)
            foreach (var row in operation.Execute(null))
                yield return row;
    }

    public UnionAllOperation Add(IOperation operation) {
        _operations.Add(operation);
        return this;
    }
}

更新:请参阅此处的并行版本。

在这样的过程中使用它:

public class Process : EtlProcess {
    protected override void Initialize() {

        Register(
            new UnionAllOperation()
                .Add(new ExtractFromExcel("WorkBook1.xls"))
                .Add(new ExtractFromExcel("WorkBook2.xls"))
        );
    }
}

这将执行联合所有操作。如果您需要一个返回不同行的联合AbstractAggregationOperation,请在所有列上实现一个和组。

于 2012-12-20T05:50:44.490 回答