0

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) };


            }
4

1 に答える 1

1

返したい各データ型のインスタンスを保持する「コンテナ」クラスを作成します。

class Container
{
    Array PGRow;
    Array AmountList;
}

次に、コードで:

Container container = new Container();
container.PGRow = ....;
container.AmountList = ....;
于 2012-08-27T17:23:26.057 に答える