我正在编写一个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查询将返回Jan的Amount总数,因为它来自会计期间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
在此部分下面以红色突出显示
“(运算符'&amp;&amp;'不能应用于bool和string类型的操作数)”
"Capital" && x.ACCOUNTING_PERIOD
在此部分下面以红色突出显示
“(运算符'&amp;&amp;'不能应用于字符串和字符串类型的操作数)”
更新: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查询中使用了一个不同的解决方案,但是我不知道我是否可以使用这种查询做类似的事情。任何建议
此外,当我盯着代码时,我发现了一些东西看起来并不像Amount在我之前编写的SQL中的任何地方总和,这是代码中必须的,或者它将列出每一行而不是只是我需要的金额之和。谢谢大家的帮助!