创建从 linq 到 SQL 查询输出的特定 json 响应?

Posted

技术标签:

【中文标题】创建从 linq 到 SQL 查询输出的特定 json 响应?【英文标题】:Create specific json response from linq to SQL query output? 【发布时间】:2021-10-16 10:22:03 【问题描述】:

我正在开发 Web API。我正在从一个数据库表中获取数据:

DispatchData dta = new DispatchData();

using (SalesDataContext oSqlData4 = new SalesDataContext())

    var result = (from x in oSqlData4.Finances
                  where (x.records.ID.Equals("12") ||
                         x.records.ID.Equals("123"))
                  where (x.Status == "Not Approved")
                  select x).ToList();

    foreach (var item in result)
    
        dta.data = new string[]  item.Order_ID.ToString(), item.ID.ToString() ;
    

    var json = JsonConvert.SerializeObject(dta);
        
    return json;


public class DispatchData

    public string[] data;

此代码只返回一条记录:

 "data": ["2508", "4684"]   

我希望数组中的每一行都像这样

"data":[ ["2508","4684"],["2223","1123"],....] 

     

【问题讨论】:

问题出在这一行data.data = … 你总是分配给数组。您需要将其添加到数组中 【参考方案1】:

为什么不将result 作为List<DispatchData> 的强类型模型返回:

您的DispatchData 班级:

public class DispatchData

    public string Order_ID get;set;
    public string ID get;set;

您可以创建一个Root 类来处理您的JSON

public class Root

  public List<DispatchData> data=new List<DispatchData>();

您可以像这样从查询中返回:

Root dta = new Root();
using (SalesDataContext oSqlData4 = new SalesDataContext())

    dta.data = (from x in oSqlData4.Finances
                  where (x.records.ID.Equals("12") ||
                         x.records.ID.Equals("123"))
                  where (x.Status == "Not Approved")
                  select x).ToList();

    var json = JsonConvert.SerializeObject(dta);
        
    return json;

【讨论】:

【参考方案2】:

对于你想要的结果,你的类定义错误

public class DispatchData

    public string[][] data;

然后可以直接在一个数组中选择这对ID,然后嵌套在另一个数组中,直接赋值给dta.data

using (SalesDataContext oSqlData4 = new SalesDataContext())

    var dta = new DispatchData() 
        data = (from x in oSqlData4.Finances
                  where (x.records.ID.Equals("12") ||
                         x.records.ID.Equals("123"))
                  where (x.Status == "Not Approved")
                  select new[] x.Order_ID.ToString(), item.ID.ToString() 
               ).ToArray()
    ;

    var json = JsonConvert.SerializeObject(dta);
        
    return json;

【讨论】:

以上是关于创建从 linq 到 SQL 查询输出的特定 json 响应?的主要内容,如果未能解决你的问题,请参考以下文章

从LINQ到SQL获取SQL查询?

如何将参数从 LINQ 查询传递到 SQL 视图?

LINQ查询使用GROUP BY和Count(*)进入匿名类型

无法显示从控制器到视图的LINQ查询输出值

LINQ to SQL 将查询结果存储在变量中

ASP.NET MVC 4、EF 和 LINQ:为多对多关系创建特定的 LINQ 查询