【问题标题】:how to return list of list in c#?如何在c#中返回列表列表?
【发布时间】:2021-10-15 22:28:43
【问题描述】:

我正在开发 web api。我正在从一个表中获取数据。

数据库中的数据

DispatchData dta = new DispatchData();
using (SalesDataContext oSqlData4 = new SalesDataContext())
            {
                // amount paid -- not paid

                var Amount_Paid = (from x in oSqlData4.Finances
                                   where 
                                 (x.Order.Customer_ID.Equals("190") ||
                                  x.Order.Customer_ID.Equals("1334"))
                                   where (x.Status == "Not Approved")
                                   select x).ToList();
                foreach (var item in Amount_Paid)
            {
                
                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"],["2508","4684"],....] }

      

【问题讨论】:

  • 为什么不将数据解析为 JSON 并返回而不是 List> ?您想要的输出不是 List>。它已经是 JSON/字典格式。您还没有告诉我们您当前的输出是什么,因此可以将其与所需的输出进行比较。我们无法对您的数据做出真正的假设。
  • 如何将查询输出放入数据对象中。像这样 { "data": [ [ "item1", "item2", "item3" ] ] }.assume items 来自 db
  • 我编辑了问题,请立即查看

标签: c# json list


【解决方案1】:

问题中确实没有足够的信息来提供完整的答案,但有一些假设......

假设SalesDataContext查询返回一个对象,我们称它为SalesPerson

SalesPerson
    Name (string)
    Title (string)
    Location (string)
    Id (int)
    Date (DateTime)
    Sales (decimal)

有了上面的假设,你可以简单地从查询结果中选择每个属性作为一个字符串,然后把它扔到一个数组中:

var myList = Amount_Paid.Select(x => 
                new[] {
                    x.Name,
                    x.Title,
                    x.Location,
                    x.Id.ToString(),
                    x.Date.ToString(), // add a format as needed
                    x.Sales.ToString() // add a format as needed
                }
            ).ToArray();

return myList;

如果你真的想要List

var myList = Amount_Paid.Select(x => 
                new List<string> {
                    x.Name,
                    x.Title,
                    x.Location,
                    x.Id.ToString(),
                    x.Date.ToString(), // add a format as needed
                    x.Sales.ToString() // add a format as needed
                }
            ).ToList();

return myList;

然后可以根据需要对结果进行序列化。

编辑

根据 OP 的编辑,上述假设没有太大变化。但是,OP 的编辑有两个错误。

  1. foreach 循环正在覆盖 dta.data
  2. data.data 的签名应该是string[][],而不是string[]

不正确

public class DispatchData
{
    public string[] data ;        
}

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

更正

public class DispatchData
{
    public string[][] data;        
}

# can either predefine the size of the dta.data array, 
# or just assign once the property can be materialized. 
# Let's use the latter...
dta.data = Amount_Paid.Select(x => 
             new[] {
                 item.Order_ID.ToString(), 
                 item.ID.ToString()
             }).ToArray();

【讨论】:

  • 请检查已编辑的问题。
  • @Roma - 编辑了答案。在我最初的回答和编辑之间,你应该有足够的时间让你朝着正确的方向前进。请通读我发布的所有内容;原始答案足以回答您的问题,但您似乎希望我们为您编写代码。请随时提出任何澄清问题,但我不会写你所有的代码;)
猜你喜欢
  • 2017-08-19
  • 2014-05-24
  • 1970-01-01
  • 2019-01-06
  • 2010-11-05
  • 1970-01-01
  • 2015-06-12
  • 2017-09-14
  • 2011-05-10
相关资源
最近更新 更多