更改API格式

时间:2019-02-21 08:59:23

标签: sql api lambda

我正在创建一个从数据库返回键和值的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
},

1 个答案:

答案 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 |
+----------+-----+-----------+

Online Demo

现在在前端框架中将此输出与等效模型映射,您将获得所需的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个属性的适当模型。