Кастинг универсальной таблицы данных к введенной таблице данных

Существует пара различий, но они не являются большими:

  1. .create эквивалентно .new сопровождаемый .save. Это просто более сжато.
  2. .create! эквивалентно .new сопровождаемый .save! (бросает ошибку при сохранении сбоев). Это - также просто крошечный бит короче
  3. , я думаю .build, главным образом псевдоним для .new. Это прокладывает себе путь в направляющих 3 и иначе в направляющих < 3.x

самая важная часть, однако, то, что эти методы можно назвать через ассоциацию (has_many, и т.д.) для автоматического соединения этих двух моделей.

16
задан Community 23 May 2017 в 11:46
поделиться

3 ответа

Приведение могло работать только в том случае, если таблица, возвращаемая методом, действительно была экземпляром MarketValueDataTable . Если это не так, все, что вы можете сделать, это скопировать данные в экземпляр MarketValueDataTable . Например, вы можете использовать метод Merge :

DataTable data = GetData();
MarketValueDataTable myData = new MarketValueDataTable();
myData.Merge(data);
34
ответ дан 30 November 2019 в 16:09
поделиться

Если ваша таблица данных является общей таблицей, то ее нельзя преобразовать в MarketValueDataTable.

Вы можете попробовать создать новый объект MarketValueDataTable и вручную добавить в него строки. Пройдя по строкам вашей общей таблицы данных, а затем по столбцам каждой строки, вы можете использовать отражение, чтобы установить значения свойств нового MarketValueDataTableRow.

Примерно так (предупреждение - псевдокод):

MarketValueDataTable mv = new MarketValueDataTable();
foreach(DataRow row in table.Rows)
{

   MarketValueDataTableRow mvrow = mv.NewRow();
   foreach(DataColumn col in table.Columns)
   {
      PropertyInfo colProperty = mvrow.GetType().GetProperty(col.Name);
      colProperty.SetValue(mvRow, row[col]);
   }
   mv.Rows.Add(mvrow);

}

Вы уловили общую идею. Пройдитесь по строкам общей таблицы и используйте отражение, чтобы найти совпадающие свойства в конкретной строке типизированных данных.

0
ответ дан 30 November 2019 в 16:09
поделиться

Вы не можете преобразовать DataTable в MarketValueDataTable по той простой причине, что он не наследуется от него.

1
ответ дан 30 November 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: