如何遍历DataRow的集合而不必强行键入它?

我有一个Excel输入文件,需要进行下一个流程处理。当前设置是将Excel导入Azure函数以检索数据以进行处理。

本质上,主要要求之一是使其通用。在分组数据方面通常是通用的。例如,人“ 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);

感谢您看这个问题。