У меня есть входной файл Excel, который мне нужно обработать для следующего потока. Текущая настройка заключается в том, что он импортирует Excel в функцию Azure для извлечения данных, а затем приступает к их обработке. Аспект бизнес-логи c упомянут ниже. Функция Azure позже будет запускаться вручную или с помощью триггера большого двоичного объекта для обработки.
По сути, одно из основных требований - сделать его обрабатывающий аспект общим c. Generi c в том смысле, что бизнес-лог c должен быть достаточно способным, чтобы разделить входной файл на несколько файлов, определяемых «настраиваемыми столбцами». Например, человек «A» хочет сгруппировать входной файл по одному столбцу, а человек «B» может захотеть сгруппировать по другому столбцу или человек «C» может захотеть сгруппировать по нескольким столбцам. Кроме того, просто чтобы добавить к несколько сложной природе вещей, данные входные файлы могут не всегда иметь одинаковые имена столбцов, но на данный момент это можно игнорировать и можно предположить, что данный файл имеет те же имена столбцов каждый раз . Есть какой-нибудь совет?
Требование: группируйте строки на основе динамического c ввода (который сообщает, по какому признаку их группировать). В настоящее время входной аспект Dynami c может быть выполнен ЛЮБЫМ способом (никаких требований в этой части, может быть любой формат или что-то еще). «Dynami c input» просто сообщает бизнес-логам 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, который предоставляется динамическим c входной файл, предоставляемый пользователем:
//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);
Спасибо за то, что посмотрите на вопрос.