如何将此T-SQL语句转换为可用于MVC3的代码

时间:2012-08-08 16:53:47

标签: c# sql-server asp.net-mvc-3 controller

我正在编写一个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中的任何地方总和,这是代码中必须的,或者它将列出每一行而不是只是我需要的金额之和。谢谢大家的帮助!

0 个答案:

没有答案