Как объединить несколько объектов с данными с помощью group by с помощью C # и объединить повторяющиеся строки?

#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);
}