繁体   English   中英

返回原始SQL作为字典

[英]return raw sql as dictionary

大家好,我正在尝试编写可使用(string)tableName获取选择表信息的代码,但是当我尝试将值放入Dictionary时出现错误。 PS:我已经生成了EF DB模型。

public Dictionary<string, List<object>> GetTableInformation(string tableName, FinkonaDatabaseType type)
    {
        Dictionary<string, List<object>> _returnableDictionary = new Dictionary<string, List<object>>();
        PropertyInfo prop = optimumEntities.GetType().GetProperty(tableName);
        Type tableType = prop.PropertyType.GenericTypeArguments[0];
        var items = optimumEntities.Database.SqlQuery(tableType, "SELECT * FROM " + tableName);

        foreach (var item in items)
        {
            foreach (PropertyInfo info in item.GetType().GetProperties())
            {
                if (!_returnableDictionary.ContainsKey(info.Name))
                {
                    _returnableDictionary.Add(info.Name, new List<object>());
                }
                _returnableDictionary[info.Name].Add(info.GetValue(info, null)); 
                // System.Reflection.TargetException, Object does not match target type.
            }
        }
        return _returnableDictionary;
    }

由于EF用于强类型输入数据,因此在这里使用ADO.NET DataTables将更加容易。 由于您不太担心返回的数据类型,因此DataTable易于浏览。

这是一个例子:

public Dictionary<string, List<object>> GetTableInformation(string tableName, FinkonaDatabaseType type)
{
   var sqlText = "SELECT * from " + tableName;
   DataTable dt = new DataTable();

   // Use DataTables to extract the whole table in one hit
   using(SqlDataAdapter da = new SqlDataAdapter(sqlText, optimumEntities.Database.ConnectionString)
   {
      da.Fill(dt);   
   }

   var tableData = new Dictionary<string, List<object>>();

   // Go through all columns, retrieving their names and populating the rows
   foreach(DataColumn dc in dt.Columns)
   {
      string columnName = dc.Name;
      rowData = new List<object>();
      tableData.Add(columnName, rowData);

      foreach(DataRow dr in dt.Rows)
      {
         rowData.Add(dr[columnName]);   
      }
   }

   return tableData;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM