LINQ的复杂SQL内连接和条件字段。 (我的LINQ产生重复。)

时间:2017-03-07 19:57:17

标签: c# sql-server entity-framework linq

我对LINQ很新,需要帮助我将SQL转换为LINQ工作。我根据其他字段值构建了一个Status字段,我的LINQ代码产生了一些重复的行,即如果有Status =" Failure"那么状态="成功"也产生了一行。

SQL:

SELECT DISTINCT T.Employee_ID
, T.Termination_date
, T.office_country_nm
, T.ticket_no
, T.ticket_url
, T.hold
, Status = 
CASE 
WHEN log.Message LIKE 'GeneralFail' THEN 'Failure'
WHEN log.Level LIKE 'Information' THEN 'Success' 
WHEN log.Level LIKE 'Debug' THEN 'Success' 
WHEN log.Level LIKE 'Error' THEN 'Failure' 
WHEN log.Level LIKE 'Warning' THEN 'Failure' ELSE 'Pending (' + CONVERT(varchar, DATEDIFF(dd, GETDATE(), DATEADD(dd, 4, T.Termination_date))) + ' days)' 
END 
FROM wd_ad_terms T LEFT OUTER JOIN wd_ad_terms_log log ON T.ticket_no =   log.midasticket AND log.midasticket <> '' AND log.midasticket IS NOT NULL 
WHERE (T.office_country_nm = @country OR T.office_country_nm IS NULL OR T.office_country_nm = '') 
ORDER BY T.Termination_date DESC, T.Employee_ID

我的尝试LINQ:

var employees = (from term in dc.wd_ad_terms.Distinct()
             join log in dc.wd_ad_terms_log on term.ticket_no equals log.midasticket into termlog
             where term.office_country_nm == country && !string.IsNullOrEmpty(country)
             from log in termlog.DefaultIfEmpty()
             select new
             {
                term.Employee_ID,
                term.Termination_date,
                term.office_country_nm,
                term.ticket_no,
                term.ticket_url,
                term.hold,
                Status = (log.Message == "GeneralFail" || log.Level == "Error" || log.Level == "Warning" ? "Failure" :
                              log.Level == "Information" || log.Level == "Debug" ? "Success" :
                              "Pending")
             });

感谢您的帮助! 保罗

0 个答案:

没有答案