Как выполнить итерацию по сбору DataRow, не набирая ее строго?
У меня есть входной файл Excel, который мне нужно обработать для следующего потока. Текущая настройка заключается в том, что он импортирует Excel в функцию Azure для получения данных, а затем приступает к их обработке. Аспект бизнес-логики упомянут ниже. Позже функция 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 И 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);
Спасибо, что посмотрели на вопрос.