マネージャーが使用するアカウントのクイック ビューを表示する Web アプリを作成しており、MVC 3 を使用しています。以下のコードを使用して、ユーザーがツリー ビューと同様にドリルダウンできるようにする jQuery を作成しました。
jQuery 支出関数
//Spend Category function for monthly
pa_click = function (pa_label) {
PA_ID = pa_label.getAttribute('pa_id');
var pa_details = document.getElementById('pa-details-' + PA_ID);
jQuery.getJSON('@Url.Action("getAjaxSCs")', { PA: pa_label.title }, function (SCS) {
pa_details.innerHTML = "";
jQuery.each(SCS, function (index, SC) {
months_html = '';
for (var i = 0; i < 12; i++) {
months_html +=
'<div id="SC-' + SC.SPEND_CATEGORY + '-' + months[i] + '" class="month-wrapper tree border-white">' +
months[i] +
'</div>';
}
pa_details.innerHTML +=
'<div id ="Spend-Category-' + SC.SPEND_CATEGORY + '" class="sc-wrapper tree border">' +
'<div id ="sc-title-' + SC.SPEND_CATEGORY + '" class="sc-title">' +
'<div class = "sc-label" title = "' + SC.SPEND_CATEGORY + '" SC_id="' + SC.SPEND_CATEGORY + '" onclick = "sc_click(this)">' + SC.SPEND_CATEGORY + '</div>' +
months_html +
'</div>' +
'<div id="sc-details-' + SC.SPEND_CATEGORY + '" class = "pa-details" style = "display:none">' + SC.SPEND_CATEGORY + '</div>' +
'</div>';
})
});
jQuery('#pa-details-' + PA_ID).show('slide', { direction: 'up' }, 'fast');
};
jQuery は、コントローラーで返される JSON を使用して、テーブルからデータを取得します。コントローラーコードは以下に掲載されています。
コントローラーコード
[Authorize]
public ActionResult getAjaxSCs(string PA = null, float AmountList = 0)
{
if (PA != null)
{
var SCList = from x in db.NDE_Actuals_Web select x;
SCList = SCList.Where(x => x.PA == PA);
return Json(SCList.Select(x => new { x.SPEND_CATEGORY}).Distinct().ToArray(), JsonRequestBehavior.AllowGet);
}
return View();
}
必要なデータを返す SQL ステートメントを作成しましたが、SQL ステートメントを sum 関数の使用方法として C# が理解できるものに変換する方法がわかりません。必要なデータを返す SQL ステートメントを以下に示します。
SQL クエリ
select
pa, SUM(amount)
from nde_actuals_web
where pa = 'A0161000' and SPEND_CATEGORY = 'Capital' and ACCOUNTING_PERIOD = 1
group by pa
助けが必要な 2 つの部分は、jQuery とコントローラーです。jQuery の場合、行出力に正しいフィールドを配置する方法を理解するのに助けが必要です。現在、下のこの行は出力しますJan Feb Mar Apr May Jun July Aug Sep Oct Nov Dec
。
months_html = '';
for (var i = 0; i < 12; i++) {
months_html +=
'<div id="SC-' + SC.SPEND_CATEGORY + '-' + months[i] + '" class="month-wrapper tree border-white">' +
months[i] +
'</div>';
}
各月の 3 文字の名前から正しい会計期間の合計金額に出力を変更する必要があります。したがって、上記の SQL クエリは、会計期間 1 からのものであるため、1 月の金額の合計を返します。
コントローラーでは、T-SQL クエリを C# コントローラー linq クエリに変換するのに助けが必要です。うまくいかない場合は、これがすべて意味をなすことを願っています. ご協力いただきありがとうございます!
更新: 1
Yasserが以下に書いたことを試しました
SCList = SCList.Where(x => x.PA == PA && x.SPEND_CATEGORY = "Capital" && x.ACCOUNTING_PERIOD = 1).OrderBy(x => x.PA);
しかし、私は周りにエラーが発生しています'&&'
x.PA == PA && x.SPEND_CATEGORY
このセクションの下に赤で下線が引かれ、
"(演算子 '&&' は bool 型および string 型のオペランドには適用できません)"
"Capital" && x.ACCOUNTING_PERIOD
このセクションの下に赤で下線が引かれ、
"(演算子 '&&' は、string 型および string 型のオペランドには適用できません)"
更新: 2
朗報ですが、コードで赤い波線が表示されなくなりましたが、Web サイトがクラッシュするようです。これは、Charlino と Yasser が以下で私を助けてくれた新しいコードです。
SCList = SCList.Where(x => x.PA == PA && x.SPEND_CATEGORY == "Capital" && x.ACCOUNTING_PERIOD == "1").OrderBy(x => x.PA);
コードをステップ実行してみましたが、このテーブルに 400,000 行を超える行があること(function evaluation timed out)
を確認しようとしたときにが表示されました。SCList
linqクエリでdistinctを使用して解決しましたが、この種のクエリでそのようなことができるかどうかわかりません。助言がありますか
また、コードを見つめていると、以前に書いた SQL のように Amount がどこでも合計されていないように見えます。私が必要とする量の。みんなの助けに感謝します!