Dapper QueryMultiple从数据库中获取实际值

问题描述 投票:-2回答:1

数据集将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;
        }`


           

是否有任何简便的方法可以从数据库获取具有实际数据类型的值,因为我不能使用任何属性

请帮助!!

c# sql dapper
1个回答
0
投票

请看https://dapper-tutorial.net/querymultiple示例。您可以使用Read方法的参数化版本以获取选择的类型。

如果我正确理解了这个想法,您希望以DataTables的形式获取数据,然后更改DataTables并对其进行处理。在这种情况下,我将工作分成多个阶段,以便从静态类型的C#语言中受益。

1)从数据库检索结果2)映射到POCO对象(就像在上面的示例中所做的一样)3)根据业务逻辑更改字段4)将对象映射回DataTables(带有Reflection的自定义代码或任何选择的nuget包)。

© www.soinside.com 2019 - 2024. All rights reserved.