将通用数据表转换为类型化数据表

cal*_*sto 16 c# datatable strongly-typed-dataset

我需要重用客户端规定的DataAccess方法.此方法返回vanilla数据表.我想将这个数据表转换为我的Typed数据表.列数及其类型将匹配.异常消息"无法将类型为'System.Data.DataTable'的对象强制转换为''类型'MarketValueDataTable'." 非常清楚,但我该如何解决?

看看cast-a-base-type-to-a-derived类型,但看不出如何使它工作.

我无法使用datareader填充数据表,只能使用客户端的DataAccess方法.

Tho*_*que 34

只有当方法返回的表实际上是一个实例时,强制转换才能工作MarketValueDataTable.如果不是,您所能做的就是将数据复制到实例中MarketValueDataTable.例如,您可以使用该Merge方法:

DataTable data = GetData();
MarketValueDataTable myData = new MarketValueDataTable();
myData.Merge(data);
Run Code Online (Sandbox Code Playgroud)


Car*_*lin 8

使用这个方便的功能将常规转换DataTable为打字DataTable.

VB

Public Shared Function ConvertToTypedDataTable(Of T As {Data.DataTable, New})(dtBase As Data.DataTable) As T
    Dim dtTyped As New T
    dtTyped.Merge(dtBase)

    Return dtTyped
End Function
Run Code Online (Sandbox Code Playgroud)

用法

Dim dtTyped = ConvertToTypedDataTable(Of dataset1.MyTypedDataTable)(MyUntypedDataTable)
Run Code Online (Sandbox Code Playgroud)

C#

public static T ConvertToTypedDataTable<T>(System.Data.DataTable dtBase) where T : Data.DataTable, new()
{
    T dtTyped = new T();
    dtTyped.Merge(dtBase);

    return dtTyped;
}
Run Code Online (Sandbox Code Playgroud)

用法

dataset1.MyTypedDataTable dtTyped = ConvertToTypedDataTable<dataset1.MyTypedDataTable>(MyUntypedDataTable);
Run Code Online (Sandbox Code Playgroud)