Как выполнить итерацию по сбору DataRow, не набирая ее строго? - PullRequest
0 голосов
/ 09 мая 2020

У меня есть входной файл 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);

Спасибо за то, что посмотрите на вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...