C# 使用Json、jQuery和Ajax返回多个值

C# 使用Json、jQuery和Ajax返回多个值,c#,ajax,arrays,json,linq-to-sql,C#,Ajax,Arrays,Json,Linq To Sql,我试图使用两条linq to SQL语句将数据从数据库返回到数组,我可以在jQuery调用中使用该数据库。我可以让Json返回一个数组,但无法让它返回第二个数组,该数组包含我需要列出的数量 你看,我正在做的是创建一个树状视图,列出每个部分的区域、项目和子程序。每个区域都有总花费,每个项目都有总花费,每个子程序都有总花费。我已经能够得到子程序的总花费,但是项目是不同的,因为我必须使用显示子程序的相同控制器来显示每个项目的总额。看起来有点像这样 地区-----一月--二月--三月--四月--五月--

我试图使用两条linq to SQL语句将数据从数据库返回到数组,我可以在jQuery调用中使用该数据库。我可以让Json返回一个数组,但无法让它返回第二个数组,该数组包含我需要列出的数量

你看,我正在做的是创建一个树状视图,列出每个部分的区域、项目和子程序。每个区域都有总花费,每个项目都有总花费,每个子程序都有总花费。我已经能够得到子程序的总花费,但是项目是不同的,因为我必须使用显示子程序的相同控制器来显示每个项目的总额。看起来有点像这样

地区-----一月--二月--三月--四月--五月--六月--七月--八月--九月--十月--十一月--十二月

+项目-----一月--二月--三月--四月--五月--六月--七月--八月--九月--十月--十一月--十二月

++子程序1--1--2--3--4--5--6--7--8--9--10--11--12

++子程序2--1--2--3--4--5--6--7--8--9--10--11--12

由于项目金额是子程序金额的总和,并且与列出子程序的位置不同,因此我很难填充第二个数组。下面的代码来自我的控制器,显示了我如何提取填充子程序名称的数组的数据

[Authorize]
        public virtual ActionResult getAjaxPGs(string SP = null, string PG = null)
        {

            if (SP != null)
            {
                var PGList = from x in db.pg_mapping
                             where x.PG_SUB_PROGRAM == SP 
                             select x;
                                 //select x.PG.Distinct().ToArray(); // I wanted to combine the PGRow = line below with the linq to SQL code above but it didn't like the .ToArray() 


                var PGRow = PGList.Select(x => new { x.PG }).Distinct().ToArray();

                return Json(PGRow, JsonRequestBehavior.AllowGet);

            }


            return View();
        }
因此,这里的代码查找并输出子程序名称,以代替子程序1和子程序2。这一部分需要保留,以便输出正确的子程序名称,但现在我需要添加代码,以便在项目级别输出总量。我原以为我可以将这段代码添加到控制器并返回两个数组,但我做得不对,我尝试过的方法都不起作用

var AmountList=来自db.expense\u Web中的x
其中x.PG==PG
x组按新{x.会计期间,x.PG,x.金额}分为PG组
选择新建{accounting_period=pggroup.Key.accounting_period,amount=pggroup.Sum(x=>x.amount)}

然后像这样把它还回去

返回Json(PGRow、AmountList、JsonRequestBehavior.AllowGet)

这不起作用。它抛出了一个错误,该错误表示“System.Web.MVC.Controller.Json(object,string,System.Web.MVC.JsonRequestBehavior)”的最佳重载匹配有一些无效参数

我完全接受所有的建议,因为我尝试过的一切都不起作用;即使一个建议将我带入一个全新的方向。老实说,我只是需要一些关于如何实现预期结果的指导。我希望我已经清楚地表达了我的问题。谢谢你们的时间和专业知识,请不要犹豫,要求任何额外的代码或澄清,因为我会尽可能经常回来检查

更新

public class Container
        {
            Array PARow;
            Array AmountList;

        }

public virtual ActionResult getAjaxPGs(string SP = null, string PG = null)
            {
                var PGList = from x in db.pg_mapping
                             where x.PG_SUB_PROGRAM == SP
                             select x;

                container.PGRow = PGList.Select(x => new { x.PG }).Distinct().ToArray();

                container.AmountList = from x in db.Spend_Web
                                    where x.PG == PG
                                    group x by new { x.ACCOUNTING_PERIOD, x.PG, x.Amount } into pggroup
                                    select new { accounting_period = pggroup.Key.ACCOUNTING_PERIOD, amount = pggroup.Sum(x => x.Amount) };


            }
创建一个“container”类,该类包含希望返回的每个数据类型的实例

class Container
{
    Array PGRow;
    Array AmountList;
}
然后在代码中:

Container container = new Container();
container.PGRow = ....;
container.AmountList = ....;

这听起来应该是可行的,但是我在代码中的变量PGRow和AmountList下得到了红色的曲线,在json返回下得到了更多的曲线,我已经在上面的代码中添加了更新的代码。有什么建议吗?在上面更新的代码中,似乎需要将“container”变量声明为container的实例。另外,请注意,您的javascript将接收一个复杂的对象,因此需要更新代码。