c# - 如何在 Web API 中执行返回数据透视表的存储过程
问题描述
如何执行返回数据透视表的存储过程并在 API 中以 JSON 格式返回数据。我想使用 API 在网页上显示其数据。我得到的只是一个对象列表,而不是其中的数据。我的程序正在返回其中表行的 983 条记录...但是根据传递的参数更改列所以对于一种参数我可以有 20 列购买另一种我可以只有 1 通过执行程序使用
var ls = db.Database.SqlQuery<dynamic>("exec [Sp_StoreItemParty] 'Amount','01-Apr-2020', '06-Sep-2020','', '', '', ''").ToList();
return Json(ls, JsonRequestBehavior.AllowGet);
如何执行返回数据透视表的存储过程并将其作为 JSON 格式的 Web API 返回。我得到的只是一个对象列表,但没有一个对象可以在 Firefox 上的 Postman 中进一步访问或进一步显示。
解决方案
SqlQuery
仅适用于已知类型,不适用于dynamic
. 你可以
创建一个代表您的结果记录的类并使用它。或者
使用此处所示的数据阅读器并复制粘贴在下面。
public static IEnumerable<dynamic> CollectionFromSql(this DbContext dbContext, string Sql, Dictionary<string, object> Parameters) { using (var cmd = dbContext.Database.GetDbConnection().CreateCommand()) { cmd.CommandText = Sql; if (cmd.Connection.State != ConnectionState.Open) cmd.Connection.Open(); foreach (KeyValuePair<string, object> param in Parameters) { DbParameter dbParameter = cmd.CreateParameter(); dbParameter.ParameterName = param.Key; dbParameter.Value = param.Value; cmd.Parameters.Add(dbParameter); } //var retObject = new List<dynamic>(); using (var dataReader = cmd.ExecuteReader()) { while (dataReader.Read()) { var dataRow = GetDataRow(dataReader); yield return dataRow ; } } } } private static dynamic GetDataRow(DbDataReader dataReader) { var dataRow = new ExpandoObject() as IDictionary<string, object>; for (var fieldCount = 0; fieldCount < dataReader.FieldCount; fieldCount++) dataRow.Add(dataReader.GetName(fieldCount), dataReader[fieldCount]); return dataRow; }
用法:
List<dynamic> MyList = MyDbContext.CollectionFromSql("SELECT * FROM \"User\" WHERE UserID = @UserID", new Dictionary<string, object> { { "@UserID", 1 } }).ToList();
推荐阅读
- angular - How to simplify NgRx effects? Only difference the service method they call-
- php - 带循环的 PHP 动态数组名称
- javascript - 如何修改我的 js 以使其正常工作?
- javascript - 如何将焦点设置在跨域的 iframe 上
- sql-server - AT (@) 符号开始和结束
- r - 错误:内存耗尽(达到限制?) R 代码 Windows 任务计划程序
- r - 为多种值类型重塑 R 中的数据
- python - 如何在 Python 中修复这个 n-gram 提取器?
- sql - 在 SQL 中分解位掩码
- r - R - 在数据框上使用 purr 添加列