数据集将4个数据表作为结果集返回,但全部为object {string}类型,即使在表中它具有不同的数据类型,如int。
var ds = new DataSet();
return var ds = WithConnection(c =>
{
var multi = c.QueryMultiple(sql: "StoredProcedureName",
param: new { Project = projectID },
commandType: CommandType.StoredProcedure);
while (!multi.IsConsumed)
{
var dt = ChngDataTable(multi.Read());
ds.Tables.Add(dt);
}
return ds;
});
protected DataTable ChngDataTable(IEnumerable<dynamic> items)
{
var exisData= items.ToArray();
var dt = new DataTable();
if (exisData.Count() == 0) return dt;
foreach (var key in ((IDictionary<string, object>)data[0]).Keys)
{
if(!dt.Columns.Contains(key))
dt.Columns.Add(key);
}
foreach (var d in exisData)
{
dt.Rows.Add(((IDictionary<string, object>)d).Values.ToArray());
}
return dt;
}`
是否有任何简便的方法可以从数据库获取具有实际数据类型的值,因为我不能使用任何属性
请帮助!!
请看https://dapper-tutorial.net/querymultiple示例。您可以使用Read方法的参数化版本以获取选择的类型。
如果我正确理解了这个想法,您希望以DataTables的形式获取数据,然后更改DataTables并对其进行处理。在这种情况下,我将工作分成多个阶段,以便从静态类型的C#语言中受益。
1)从数据库检索结果2)映射到POCO对象(就像在上面的示例中所做的一样)3)根据业务逻辑更改字段4)将对象映射回DataTables(带有Reflection的自定义代码或任何选择的nuget包)。