我有一个 Excel 输入文件,我需要处理下一个流程。当前设置是将 Excel 导入 Azure 函数以检索数据,然后继续处理它。业务逻辑方面在下面提到。稍后将手动触发 Azure 函数或通过 blob 触发器进行处理。
本质上,主要要求之一是使其处理方面具有通用性。通用的意思是业务逻辑需要有足够的能力将输入文件拆分为由“自定义列”定义的多个文件。例如,人“A”希望按一列对输入文件进行分组,但人“B”可能希望按另一列分组,或者人“C”可能希望按多列分组。也只是为了增加事物的复杂性,给定的输入文件可能并不总是具有相同的列名,但现在可以忽略这一点,并且可以假设给定的文件每次都具有相同的列名。有什么建议吗?
要求:根据动态输入对行进行分组(告诉按什么进行分组)。目前它的动态输入方面可以以任何方式完成(这部分没有要求,可以是任何格式或其他)。“动态输入”只是告诉业务逻辑根据什么分割文件。
Input File:
| ActivityId | RunbookName | Result | ProjectID | Architect | TimeZone
|------------|---------------------|-------------------|-----------|-----------|----------
| 5271D9E9 | Foo | State 2, Status 1 | 111 | Bob | EST
| 5271D9E9 | Foo | State 2, Status 1 | 111 | Ann | EST
| 5271D9E9 | Bar | State 2, Status 3 | 222 | Mike | PST
| 394B044 | Fooey | State 2, Status 1 | 222 | Mike | PST
| 394B044 | Dooey | State 2, Status 1 | 333 | Bob | EST
| D94321B | Dooey | State 2, Status 1 | 333 | Ann | EST
| 9E4371A | Foo | State 2, Status 1 | 333 | Bob | EST
示例:给定上面的输入,人“A”想要 RunbookName 的单独文件,因此人“A”的输出是:
File 1:
| ActivityId | RunbookName | Result | ProjectID | Architect | TimeZone
|------------|---------------------|-------------------|-----------|-----------|----------
| 5271D9E9 | Foo | State 2, Status 1 | 111 | Bob | EST
| 5271D9E9 | Foo | State 2, Status 1 | 111 | Ann | EST
| 9E4371A | Foo | State 2, Status 1 | 333 | Bob | EST
File 2:
| ActivityId | RunbookName | Result | ProjectID | Architect | TimeZone
|------------|---------------------|-------------------|-----------|-----------|----------
| 5271D9E9 | Bar | State 2, Status 3 | 222 | Mike | PST
File 3:
| ActivityId | RunbookName | Result | ProjectID | Architect | TimeZone
|------------|---------------------|-------------------|-----------|-----------|----------
| 394B044 | Dooey | State 2, Status 1 | 333 | Bob | EST
| D94321B | Dooey | State 2, Status 1 | 333 | Ann | EST
File 4:
| ActivityId | RunbookName | Result | ProjectID | Architect | TimeZone
|------------|---------------------|-------------------|-----------|-----------|----------
| 394B044 | Fooey | State 2, Status 1 | 222 | Mike | PST
示例:给定上面的原始输入,人“C”可能需要 RunbookName AND Architect 的单独输出文件,因此输出为:
File 1:
| ActivityId | RunbookName | Result | ProjectID | Architect | TimeZone
|------------|---------------------|-------------------|-----------|-----------|----------
| 5271D9E9 | Foo | State 2, Status 1 | 111 | Bob | EST
| 394B044 | Dooey | State 2, Status 1 | 333 | Bob | EST
File 2:
| ActivityId | RunbookName | Result | ProjectID | Architect | TimeZone
|------------|---------------------|-------------------|-----------|-----------|----------
| 5271D9E9 | Bar | State 2, Status 3 | 222 | Mike | PST
| 394B044 | Fooey | State 2, Status 1 | 222 | Mike | PST
File 3:
| ActivityId | RunbookName | Result | ProjectID | Architect | TimeZone
|------------|---------------------|-------------------|-----------|-----------|----------
| 5271D9E9 | Foo | State 2, Status 1 | 111 | Ann | EST
| D94321B | Dooey | State 2, Status 1 | 333 | Ann | EST
目前我对这段代码有疑问:
//Get all rows that satisfies queryFilter condition
EnumerableRowCollection results = dataTable.AsEnumerable().Where(x => x.Field<string>("RunbookName") == "RunbookName");
我想实现这样的事情,假设我们知道从用户提供的动态输入文件提供的 RunbookName 的数据类型:
//Get all rows that satisfies queryFilter condition
EnumerableRowCollection results = dataTable.AsEnumerable().Where(x => x.Field<dynamic.DataType>(dynamic.ColumnName) == dynamic.ColumnName);
或者甚至更好地尝试做这样的事情,而不必为了获得价值而强行输入它:
//Get all rows that satisfies queryFilter condition
EnumerableRowCollection results = dataTable.AsEnumerable().Where(x => x.Field(dynamic.ColumnName) == dynamic.ColumnName);
感谢您查看问题。