I am looking for assistance translating a SQL CASE Statement into LINQ code. Thing is, I need to implement it into code that already exists.
Basically, I need to transform memberIssues.IsClosed
into the Alert Status CASE Statement below, but I've been having some difficulties.
List<IssueRowDTO> issuesList = new List<IssueRowDTO>();
if (userRoleInfo.CanViewAllIssues)
{
#region View All Issues LINQ
// If user can view all issues, then User ID check is removed.
issuesList = (from memberIssues in dbContext.MemberIssues
from issueSteps in dbContext.IssueSteps.Where(issueSteps => issueSteps.ID == memberIssues.CurrentStepID).DefaultIfEmpty()
from issueDefs in dbContext.IssueDefs.Where(issueDefs => issueDefs.ID == memberIssues.IssueDefsID).DefaultIfEmpty()
from member in dbContext.Member.Where(member => member.ID == memberIssues.MemberID).DefaultIfEmpty()
from memberTeam in dbContext.MemberTeam.Where(memberTeam => memberTeam.MemberID == memberIssues.MemberID
&& memberTeam.RoleID == issueSteps.RoleID).DefaultIfEmpty()
from userRoles in dbContext.UserRoles.Where(userRoles => userRoles.RoleID == memberTeam.RoleID
&& userRoles.UserID == memberTeam.UserID).DefaultIfEmpty()
from users in dbContext.Users.Where(users => users.ID == userRoles.UserID).DefaultIfEmpty()
from plans in dbContext.Plans.Where(plans => plans.ID == member.PlanID).DefaultIfEmpty()
where memberIssues.CreatedDate > searchFromDate
select new IssueRowDTO
{
IssueID = memberIssues.ID,
MemberID = memberIssues.MemberID,
ActionRequiredBy = users.FirstName + " " + users.LastName,
MemberName = member.FirstName + " " + member.LastName,
MLTC = plans.PlanName,
Issue = issueDefs.IssueName,
CreatedDate = memberIssues.CreatedDate,
LastUpdate = memberIssues.LastUpdate ?? memberIssues.CreatedDate,
NextDeadline = memberIssues.NextDeadline ??
memberIssues.CreatedDate,
IsClosed = memberIssues.IsClosed,
ClosedOffService = memberIssues.ClosedOffService ?? "",
SubIssueDefsID = memberIssues.SubIssueDefsID ?? 0,
CurrentStepNum = issueSteps.StepNum
})
.ToList();
SQL
CASE
WHEN CurrentStepNum > 1 THEN 'Positive'
WHEN CurrentStepNum = 1 AND memberIssues.IsClosed <> 1 THEN 'Pending'
WHEN CurrentStepNum = 1 THEN 'False Positive'
END AS 'Alert Status'