Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有左联接、group by和with case语句的sql to linq语句_C#_Sql_Asp.net Mvc 3_Linq To Sql - Fatal编程技术网

C# 带有左联接、group by和with case语句的sql to linq语句

C# 带有左联接、group by和with case语句的sql to linq语句,c#,sql,asp.net-mvc-3,linq-to-sql,C#,Sql,Asp.net Mvc 3,Linq To Sql,我只是MVC3的新手,有点小问题。我想将此SQL语句转换为Linq。有人能帮我解决这个问题吗,这是我的sql语句: SELECT a.payment_ref_no, c.institution_name, a.check_date, batchstatus = CASE WHEN d.mccount = Count(b.check_detail_no) THEN

我只是MVC3的新手,有点小问题。我想将此SQL语句转换为Linq。有人能帮我解决这个问题吗,这是我的sql语句:

SELECT a.payment_ref_no, 
       c.institution_name, 
       a.check_date, 
       batchstatus = CASE 
                       WHEN d.mccount = Count(b.check_detail_no) THEN 
                       'Completed' 
                       WHEN d.mccount IS NULL THEN 'Approved' 
                       WHEN d.mccount < Count(b.check_detail_no) THEN 
                       'Partially Processed' 
                     END, 
       noofpayments=Count(b.check_detail_no), 
       totalamount=Sum(b.check_amount), 
       d.mccount 
FROM   check_request a 
       JOIN check_details b 
         ON a.request_ref_no = b.request_ref_no 
       JOIN institution c 
         ON a.company_code = c.company_code 
       LEFT JOIN vw_batchstatus d 
              ON a.request_ref_no = d.request_ref_no 
WHERE  a.payment_ref_no IS NOT NULL 
GROUP  BY a.payment_ref_no, 
          a.check_date, 
          c.institution_name, 
          d.mccount 
选择a.payment\u ref\u no,
c、 机构名称,
a、 核对日期,
batchstatus=案例
当d.mccount=计数(b.check\u detail\u no)时,则
“已完成”
当d.mccount为空时,则为“已批准”
当d.mccount
主要是通过内存完成的,可能会有一些问题,但这应该是朝着正确方向迈出的一步

var test =  from a in check_request
        join b in check_details on a.request_ref_no equals b.request_ref_no
        join c in institution on a.company_code equals c.company_code
        join d in vw_batchstatus on a.request_ref_no equals d.request_ref_no into dvwinner
        from d in dvwinner.DefaultIfEmpty()
        where a.payment_ref.HasValue
        group a by new (a.payment_ref_no, a.check_date, c.institution_name, d.mccount) into gr1
        select new {
            ref_no = a.payment_ref_no,
            inst_name = c.institution_name,
            check_date = a.check_date,
            batstat = !d.mccount.HasValue ? 'Approved' : d.mccount == b.check_detail_no.Count() ? 'Completed' : 'Partially Processed',
            noofpayments = b.check_detail_no.Count(),
            ttlamount = gr1.Sum(p=>p.check_amount),
            mccount = d.mccount
        };

谢谢Kyle的帮助。我终于解决了自己的问题,这是我sql语句的关键

var test =  from a in CHECK_REQUESTs
    join b in CHECK_DETAILS on a.REQUEST_REF_NO equals b.REQUEST_REF_NO
    join c in INSTITUTIONs on a.COMPANY_CODE equals c.COMPANY_CODE
    join d in Vw_BatchStatus on a.REQUEST_REF_NO equals d.REQUEST_REF_NO into t from rt in     t.DefaultIfEmpty()
        where a.PAYMENT_REF_NO != string.Empty 
        let institutionName = (string)c.Institution_Name
        let mcCount = (int)rt.Mccount
        group b by new 
        {
        a.PAYMENT_REF_NO, 
        a.Check_Date, 
        institutionName, 
       mcCount
        } into gr1
        select new 
        {
        gr1.Key.PAYMENT_REF_NO, 
        gr1.Key.institutionName, 
        gr1.Key.Check_Date,
        batchstatus = (gr1.Key.mcCount == gr1.Count()) ? "Completed" : 
        (gr1.Key.mcCount < gr1.Count()) ? "Partially Processed": 
        (gr1.Key.mcCount == null ) ? "Approved" : " ",
        noofpayments = gr1.Count(),
        totalamount = gr1.Sum(c => c.Check_Amount)
        };
var test=来自签入请求
加入b检查a上的详细信息。请求参考编号等于b请求参考编号
在a公司代码等于c公司代码的机构中加入c
在Vw_BatchStatus中加入d,a.REQUEST_REF_NO等于d.REQUEST_REF_NO从t中的rt进入t.DefaultIfEmpty()
其中a.付款参考号!=字符串。空
让institutionName=(字符串)c.Institution\u Name
设mcCount=(int)rt.mcCount
b组由纽约
{
a、 付款参考号:,
a、 核对日期,
机构名称,
麦考特
}进入gr1
选择新的
{
gr1.Key.PAYMENT\u参考号,
gr1.Key.institutionName,
gr1.Key.Check_日期,
batchstatus=(gr1.Key.mcCount==gr1.Count())?“已完成”:
(gr1.Key.mcCountc.支票金额)
};

谢谢你的回答。但是我在“dvwinner.DefaultIfEmpty()”中的“from d”行有一个错误,它说“string”不包含“HasValue”的定义,并且找不到接受“string”类型的第一个参数的扩展方法“HasValue”(是否缺少using指令或程序集引用