2012-08-27 50 views
0

我想使用兩個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) }; 


      } 

回答

1

創建一個「容器」類,它包含要返回每個數據類型的實例。

class Container 
{ 
    Array PGRow; 
    Array AmountList; 
} 
在你的代碼

然後:

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

這聽起來像它應該工作,但我的變量PGRow和AmountList代碼下獲得紅色波浪線和一些json的回報下,我加入了更新代碼到上面的代碼。有什麼建議? – Goldentp

+0

在上面的更新代碼中,看起來您需要聲明「容器」變量是Container的一個實例。另外,請注意,您的JavaScript將收到一個複雜的對象,以便代碼需要更新。 – Brandon