Dapper QueryMultiple Получить фактические значения из БД - PullRequest
0 голосов
/ 22 февраля 2020

Набор данных возвращает 4 таблицы данных как набор результатов, но все в виде типа объекта {строки}, хотя в таблице он имеет различные типы данных, такие как 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;
        }`


           

Есть ли простой способ получить значения с фактическим типом данных из БД, поскольку я не могу использовать какие-либо свойства

Пожалуйста, помогите !!!!

1 Ответ

0 голосов
/ 23 февраля 2020

пожалуйста, посмотрите на пример https://dapper-tutorial.net/querymultiple. Вы можете использовать параметризованную версию метода Read, чтобы получить тип выбора.

Если я правильно понимаю идею, вы хотели бы получить данные в виде DataTables, затем изменить DataTables и затем что-то с ними сделать. В этом случае я бы разбил работу на этапы, чтобы воспользоваться статически типизированным языком C#.

1) Получить результат из базы данных 2) Сопоставить с объектами POCO (как это делается в пример выше) 3) Измените поля в соответствии с бизнес-логикой 4) Сопоставьте объекты обратно в DataTables (либо пользовательский код с Reflection, либо любой выбранный пакет nuget).

...