2013-02-13 85 views
0

我刚刚在MVC3新,有一点问题。我想将这个SQL语句转换成Linq。任何人都可以请帮我解决这个问题,这是我的SQL语句:SQL到linq语句与左连接,分组与按case语句

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 
+0

http://whathaveyoutried.com/ – ssilas777 2013-02-13 06:36:11

回答

0

从内存大多完成,可能会出现一些问题,而应该在你的正确方向迈出的一步。

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 
     }; 
+0

感谢您的回答。但我有一个错误在 “d from dvwinner.DefaultIfEmpty()” 说 'string'不包含'HasValue'的定义,并且没有扩展方法'HasValue'接受类型'字符串'可以找到(你是否缺少使用指令或程序集引用 – JOHn 2013-02-13 09:34:21

0

感谢凯尔的help.I终于解决我自己的问题,这是我的SQL语句的LINQ

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) 
     };