Ну, CopyToDataTable
не может узнать, какой правильный сильный DataTable
тип для данного типа DataRow
, поскольку DataRow
не предоставляет эту информацию (что, к сожалению, ИМХО).
Возможно, вы могли бы написать свой собственный метод CopyToDataTable, который бы использовал другой параметр типа для указания типа таблицы. Примерно так:
public static TTable CopyToDataTable<TRow, TTable>(this IEnumerable<TRow> rows)
where TRow : DataRow, new()
where TTable : DataTable, new()
{
TTable table = new TTable();
foreach (TRow row in rows)
{
TRow rowCopy = new TRow();
object[] itemArrayCopy = new object[row.ItemArray.Length];
row.ItemArray.CopyTo(itemArrayCopy, 0);
rowCopy.ItemArray = itemArrayCopy;
table.Rows.Add(rowCopy);
}
return table;
}
РЕДАКТИРОВАТЬ:
как я могу использовать эту новую функцию в приведенном выше примере?
Вы должны поместить этот метод расширения в статический класс. Если вы помещаете класс в другое пространство имен, обязательно импортируйте это пространство имен в области с предложением using
.
Затем вы можете использовать такой метод (вы должны указать параметры типа, поскольку компилятор не может определить тип TTable):
return productlist.Skip(begin).Take(pagesize).CopyToDataTable<DataSetProducts.productsRow, DataSetProducts.productsDataTable>();
Обратите внимание, что я не тестировал этот код, возможно, есть несколько ошибок ...