#c# #datatable
#c# #datatable
Вопрос:
Привет, у меня есть следующий сценарий:
У меня есть набор запросов, которые вернут мне набор объектов с данными. В datatable будет несколько идентичных строк-столбцов и несколько столбцов, уникальных для каждой таблицы. например
Таблица 1:
Name | Jan Data | Feb Data
A |10 |20
B |12 |9
Таблица 2:
Name | Mar Data | Apr Data | May Data
A |12 |21 |5
C |14 |90 |6
Теперь я хочу объединить эти два объекта таблицы данных. но при объединении появляются такие имена, как A, которые являются общими для обеих таблиц, и данные меняются. итак, я хочу получить такой результат, как:
Name | Jan Data | Feb Data | Mar Data | Apr Data | May Data
A |12 |21 |5 | 45 |52
B | 0 | 0 | |62 |21
C |14 |90 |6 |63 |42
результирующая таблица будет содержать сумму значений каждой строки при группировании по имени. (я не стал утруждать себя вычислением здесь извинений)
Можете ли вы предложить мне подход, как этого можно достичь?
Я использую C # 2.0
Комментарии:
1. не могли бы вы, пожалуйста, уточнить свои исходные данные, как получается 45 для данных за апрель и 52 для данных за май
2. -1 за то, что «не стал утруждать себя»
3. @gbbosmiya: я неправильно подвел итог. я упоминал об этом в вопросе.
4. @George Polevoy: У нас есть общий сценарий, в котором передаваемый нами запрос не определен во время компиляции. Это будет динамически сгенерировано, и, следовательно, мы получим разные таблицы в качестве результатов. В любом случае, теперь мы придумали подход. Мой коллега уже сделал это в sql, но нам пришлось переделать это в C # из-за ограничения.
Ответ №1:
Я бы написал другой запрос, чтобы объединить два и вернуть именно то, что я хотел. То, что вы описываете, — это то, для чего созданы реляционные базы данных и SQL. Я бы не стал делать это в коде, если бы мне не было абсолютно необходимо.
Комментарии:
1. это хорошая идея … я не очень хорошо разбираюсь в sql… есть какие-нибудь указания, которыми вы хотели бы поделиться, как этого можно достичь в sql?
2. Да — станьте лучше разбираться в SQL. Я не могу быть конкретным, потому что я не знаю вашей схемы.
Ответ №2:
Если вы можете сделать это в представлении в SQL, это может быть вашим лучшим результатом.
Если вы ограничены в этом, я верю, что вы получите желаемые результаты из DataTable.Слияние
В коде это будет выглядеть примерно так:
private DataTable CombineTables(DataSet ds)
{
return New DataTable = ds.Tables(0).Merge(ds.Tables(1),true,MissingSchemaAction.Add);
}