1

我正在编写一个 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 求和,这是代码中必须具备的,否则它将列出每一行而不是总和我需要的金额。感谢大家的帮助!

4

0 回答 0