C# 带有左联接、group by和with case语句的sql to linq语句
我只是MVC3的新手,有点小问题。我想将此SQL语句转换为Linq。有人能帮我解决这个问题吗,这是我的sql语句: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
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指令或程序集引用