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)
使用这个方便的功能将常规转换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)