我正在创建一个从数据库返回键和值的API。我想通过RowId返回数据。 我在c#中使用存储过程和lambda表达式。在获取存储过程的返回值之后,我只是使用.ToList()。
这是我的示例代码:
SELECT
Id
,RowId
,Key
,Value
FROM
TableOne
WHERE
UserId = @userId AND RankType = @rankType
以下是示例数据:
Id RowId Key Value
1 2 Name John Doe
2 2 Age 30
3 2 Position Developer
到目前为止,我得到的API响应:
{
"Key": Name,
"Value": John Doe
},
{
"Key": Age,
"Value": 30
},
{
"Key": Position,
"Value": Developer
}
这是我想要的API响应。如何将我的API响应格式化为这种格式?
{
"Key": Name, "Value": John Doe,
"Key": Age, "Value": 30,
"Key": Position, "Value": Developer
},
答案 0 :(得分:0)
方法1:
您可以像下面这样编写查询。
select [Name], Age, Position
FROM
(
select [Value], [Key]
from TableOne
) d
pivot
(
max([Value])
for [Key] in ([Name], Age, Position)
) piv
您将获得如下输出。
+----------+-----+-----------+
| Name | Age | Position |
+----------+-----+-----------+
| John Doe | 30 | Developer |
+----------+-----+-----------+
现在在前端框架中将此输出与等效模型映射,您将获得所需的JSON,如下所示。
{"Name":"John Doe","Age":"30","Position":"Developer"}
方法2(直接从数据库以字符串形式返回JSON)
为此,您可以像下面这样编写查询。
select [Name], Age, Position
FROM
(
select [Value], [Key]
from TableOne
) d
pivot
(
max([Value])
for [Key] in ([Name], Age, Position)
) piv
for json auto
方法3:
通常从DB
读取数据,并使用LINQ
或简单的if语句将其转换为具有3个属性的适当模型。