+2  A: 

Why have a CASE in your joining criteria? What do you expect the optimizer to do with that exactly?

Here's a literal translation.

from svcMap in db.svcMaps
where svcMap.ToBill == 1
let svc = svcMap.Svc
where (svcMap.Desired == 0 && svcMap.Present <> svc.Disabled)
  || (svcMap.Desired <> 0 && svcMap.Desired <> svc.Disabled)
let optionId =
  svcMap.Desired <> 0 && svcMap.Desired <> svc.Disabled ? svcMap.Desired :
  svcMap.Present <> svc.Disabled ? svc.Present :
  0
from option in db.Options
where option.SvcOptionId == optionId
select new {svc.SvcName, option.SvcOptionName, svcMap.Price }
David B
I need value of `svcOptions.SvcOptionName` conditionally and that is the condition which is specified in `CASE WHEN` clause. I would like to know a simpler/better approach to this, if possible.
Ismail
@David! I've not created Foreign Keys, so I don't know if `let svc = svcMap.Svc` will work?
Ismail
+1 Thanks for the inspiration. I got the solution.
Ismail
I've updated the question with my solution. Still I accept your answer as you have attempted the question which till now other 22 people viewed but didn't answered.
Ismail