2 つの linq-to-SQL ステートメントを使用して、jQuery 呼び出しで使用できるデータベースから配列にデータを返そうとしています。Json が 1 つの配列を返すようにすることはできますが、リストする必要がある金額を含む 2 番目の配列を返すことはできません。
各セクションのエリア、プロジェクト、およびサブプログラムを一覧表示するツリービューを作成していることがわかります。すべてのエリアには総支出額があり、すべてのプロジェクトには総支出額があり、すべてのサブプログラムには総支出額があります。サブプログラムに費やされた合計金額を取得できましたが、サブプログラムを表示するために使用するのと同じコントローラーを使用して各プロジェクトの合計を表示する必要があるため、プロジェクトは別の話です。ちょっとこんな感じです。
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
プロジェクトの金額はサブプログラムの金額の合計であり、サブプログラムがリストされているテーブルとは別のテーブルにあるため、2 番目の配列を埋めるのに苦労しています。以下のコードはコントローラーからのもので、サブプログラム名を埋める配列のデータを取得する方法を示しています。
[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 の代わりにサブプログラム名を見つけて出力します。この部分は、正しいサブプログラム名を出力するために残す必要がありますが、プロジェクト レベルで合計金額を出力するコードを追加する必要があります。このコードをコントローラーに追加して 2 つの配列を返すことができると思っていましたが、正しく実行できておらず、試した方法はどれもうまくいきませんでした。
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) };
}