我想使用兩個linq-to-SQL語句將數據從數據庫返回給數組,我可以在jQuery調用中使用它。我可以讓Json返回一個數組,但是我無法讓它返回包含我需要列出的數量的第二個數組。使用Json,jQuery和Ajax返回多個值
你看我在做什麼是我創建一個列表區域,項目和每個部分的子程序的樹形視圖。每個區域都有花費的總金額,每個項目都有總花費,每個子程序都有花費總額。我已經能夠獲得用於子程序的總金額,但項目是一個不同的故事,因爲我必須使用相同的控制器來顯示子程序以顯示每個項目的總計。它看起來有點像這樣。
Area------------Jan--Feb--March--April--May--June--July--Aug--Sept--Oct--Nov--Dec
+Project--------Jan--Feb--March--April--May--June--July--Aug--Sept--Oct--Nov--Dec
++Sub-Program1--Jan--Feb--March--April--May--June--July--Aug--Sept--Oct--Nov--Dec
++Sub-Program2--Jan--Feb--March--April--May--June--July--Aug--Sept--Oct--Nov--Dec
由於工程量爲子程序量的總和,是在不同的表比在該子計劃中列出我我很難獲得第二個數組。下面的代碼來自我的控制器,並展示瞭如何爲填充子程序名稱的數組抽取數據。
[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();
}
因此,此代碼在此查找並輸出子程序名稱以代替Sub-Program1和Sub-Program2。這部分需要保留,以便它將輸出正確的子程序名稱,但現在我需要添加將在項目級別輸出總量的代碼。我想我可以將這段代碼添加到控制器並返回兩個數組,但我沒有做到這一點,我嘗試過的方法都沒有奏效。
var 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) };
,然後返回它像這樣
return Json(PGRow, AmountList, JsonRequestBehavior.AllowGet);
這並沒有解決它扔了一個錯誤,說:The best overload match for 'System.Web.MVC.Controller.Json(object,string,System.Web.MVC.JsonRequestBehavior)' has some invalid arguments
我對所有的建議完全開放的,因爲我的一切嘗試過沒有工作;即使一個建議讓我進入一個全新的方向。我真的只需要一些關於如何去實現預期結果的指導。我希望我明確表達了我的問題。謝謝大家的時間和專業知識,請不要猶豫,要求任何額外的代碼或澄清,因爲我會盡可能經常檢查。
更新
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) };
}
這聽起來像它應該工作,但我的變量PGRow和AmountList代碼下獲得紅色波浪線和一些json的回報下,我加入了更新代碼到上面的代碼。有什麼建議? – Goldentp
在上面的更新代碼中,看起來您需要聲明「容器」變量是Container的一個實例。另外,請注意,您的JavaScript將收到一個複雜的對象,以便代碼需要更新。 – Brandon