具有最大生效日期的Linq查询

时间:2020-03-27 20:33:07

标签: linq

难以理解如何将以下SQL查询转换为LINQ。特别是MAX有效日期部分。

SELECT A.NAME, X.XLATLONGNAME AS ACTION, C.DESCR, B.EFFDT 
FROM ACTN_REASON_TBL C, XLATTABLE X, PERSONAL_DATA A, JOB B 
WHERE A.EMPLID = B.EMPLID 
AND B.ACTION =  C.ACTION(+) 
AND B.ACTION_REASON =  C.ACTION_REASON(+) 
AND (C.EFFDT = (SELECT MAX(C_ED.EFFDT) FROM ACTN_REASON_TBL C_ED 
               WHERE C.ACTION = C_ED.ACTION 
               AND C.ACTION_REASON = C_ED.ACTION_REASON 
               AND C_ED.EFFDT <= B.EFFDT) 
OR C.EFFDT IS NULL) 
AND X.FIELDNAME = 'ACTION' 
AND B.ACTION = X.FIELDVALUE 
AND X.EFFDT = (SELECT MAX(X_ED.EFFDT) FROM XLATTABLE X_ED  
               WHERE X.FIELDNAME = X_ED.FIELDNAME 
               AND X.LANGUAGE_CD = X_ED.LANGUAGE_CD 
               AND X.FIELDVALUE = X_ED.FIELDVALUE 
               AND X_ED.EFFDT <= SYSDATE) 
AND B.ACTION_DT BETWEEN sysdate - 30 AND sysdate 
AND B.ACTION NOT IN ('EOI','NBY','LIF','FSC','LOA','LTD','PLA','RFL','PAY') 
ORDER BY A.NAME, B.EFFDT DESC

这是我到目前为止对LINQ查询所拥有的...

    public ActionResult RecentTransaction()
    {

        RecentTransViewModel recTransModel = new RecentTransViewModel();
        var minusThirty = DateTime.Today.AddDays(-90);
        var today = DateTime.Now;
        var exceptionList = new List<string> { "EOI", "NBY", "LIF", "FSC", "LOA", "LTD", "PLA", "RFL", "PAY" };

        var transaction = (from p in recentTrans.PERSONAL_DATA
                           join j in recentTrans.JOB on p.EMPLID equals j.EMPLID
                           join a in recentTrans.ACTN_REASON_TBL on j.ACTION_REASON equals a.ACTION_REASON
                           join x in recentTrans.XLATTABLE_VW on j.ACTION equals x.FIELDVALUE
                           where x.FIELDNAME == "ACTION"
                           where j.ACTION_DT >= minusThirty
                           where j.ACTION_DT <= today
                           where !exceptionList.Contains(j.ACTION)
                           select new RecentTransViewModel
                           {
                               Name = p.NAME,
                               Action = x.XLATLONGNAME,
                               Descr = a.DESCR,
                               EffectiveDate = j.EFFDT
                           }).OrderBy(d => d.Name)                            
                           .ToList();



        return View(transaction); 

任何帮助都非常有用!

1 个答案:

答案 0 :(得分:0)

LINQ允许您在同一contex中添加嵌套查询,以便您可以:

select new RecentTransViewModel
{
   Name = p.NAME,
   Action = x.XLATLONGNAME,
   Descr = a.DESCR,
   EffectiveDate = EffectiveDate = (from eft in recentTrans.XLATTABLE_VW 
                                    where eft.FIELDNAME == x.FIELDNAME AND eft.LANGUAGE_CD = X.LANGUAGE_CD AND 
                                    eft.FIELDVALUE = x.FIELDVALUE AND eft.EFFDT <= SYSDATE 
                                    select eft).Max(c=> c.EFFDT)
}).OrderBy(d => d.Name)                            
.ToList();