我正在编写一个 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 语句转换为 C# 可以理解的东西,因为我必须使用 sum 函数。将返回我需要的数据的 SQL 语句如下。
SQL查询
select
pa, SUM(amount)
from nde_actuals_web
where pa = 'A0161000' and SPEND_CATEGORY = 'Capital' and ACCOUNTING_PERIOD = 1
group by pa
我需要帮助的两个部分是 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。
在控制器中,我需要帮助将 T-SQL 查询转换为 C# 控制器 linq 查询。我希望这一切都是有道理的,如果不是,我会经常回来查看,随时提出任何可能有帮助的问题。谢谢你的帮助!
更新:1
我试过亚瑟在下面写的
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
它在本节下方用红色下划线表示
“(运算符'&&'不能应用于布尔和字符串类型的操作数)”
"Capital" && x.ACCOUNTING_PERIOD
它在本节下方用红色下划线表示
“(运算符'&&'不能应用于字符串和字符串类型的操作数)”
更新:2
好消息大家,代码不再给我红色波浪线,但它似乎确实导致网站崩溃。这是 Charlino 和 Yasser 在下面帮助我编写的新代码。
SCList = SCList.Where(x => x.PA == PA && x.SPEND_CATEGORY == "Capital" && x.ACCOUNTING_PERIOD == "1").OrderBy(x => x.PA);
我尝试单步执行代码,(function evaluation timed out)
当我尝试查看SCList
此表中有超过 400,000 行时,我得到了一个结果,所以我并不感到惊讶,这以前发生过。我在 linq 查询中使用 distinct 解决了它,但我不知道我是否可以用这种查询做类似的事情。有什么建议么
此外,当我盯着代码时,我注意到了一些东西,它看起来不像我之前编写的 SQL 中的任何地方都对 Amount 求和,这是代码中必须具备的,否则它将列出每一行而不是总和我需要的金额。感谢大家的帮助!