c# - 如何从 SQL 查询返回动态对象

标签 c# sql entity-framework asp.net-web-api dbcontext

我有一个 storeprocdure 返回集合的情况,但我不知道对象的结构,因为查询是非常动态的。

一个查询可以返回:

Id | Location | MarketSegment | ... n columns

另一个可以返回

Id | Sales Rep | Location | Region | ... n columns

正如您在下面的代码中所见,我只是简单地返回了一个“对象”。我知道这行不通,但我该如何设置它呢?

using (DbContext db = new Context())
{

    var items = db.Database.SqlQuery<object>(
        "SP @Param1, @Param2",
        new SqlParameter("Param1", ped),
        new SqlParameter("Param2", 25)
    ).ToList();

    return Request.CreateResponse<List<object>>(HttpStatusCode.OK, items);
}

编辑:

我不知道展示 SP 是否有帮助,除非我能解释得更多。

每一列都表示为自定义字段。用户可以创建 n 个自定义字段。因此,如果您为 User1 运行 SP,并且他有 5 个自定义字段,那么每个自定义字段将在列中表示,但如果 User2 有 3 个自定义字段,则只会表示 3 列。我无法控制的是自定义字段名称和自定义字段的数量。

最佳答案

如果使用 SQL 2016 或更新版本,请将“FOR JSON AUTO”添加到您的查询中以作为 JSON 返回,例如:

var json = db.Database.SqlQuery<string>("Select x, y, z FROM tbl FOR JSON AUTO").First();

然后使用Json.Net创建动态对象使用

var myDynamic = JObject.Parse(json)

关于c# - 如何从 SQL 查询返回动态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25494384/

相关文章:

c# - 寻找 List<KeyValuePair<string, KeyValuePair<string, string>>> 的替代品

mysql - 如何将数据库(MySQL)中的[名称,值]对存储在表的单个列/字段中?

c# - 获取 "The entity type <model> is not part of the model for the current context."

c# - LINQ到实体- Entity Framework

c# - inproc 和 outproc 的区别

C#调用native代码比native调用native快

sql - 直接从用户定义的函数中选择 xml 节点

php - 在 PHP 中从三个 MySQL 表中选择数据

c# - Entity Framework 的原子增量

c# - 使用按日期/月份分组的日期期间操作列表中的数据