Can anybody jump in and help me finish my code? I'd like to convert this SQL Query to C# EF. I have attached below my attempt. I should be able to finish the rest if I have a sample for the ReferredCode part.
Please enlighten me if it even is possible to convert. Any help is appreciated. Thanks!
SQL Query
SELECT cd.id,
cd.RunOrder,
cd.ItemId,
code =
case
when cd.IsItemAssembly=0 or cd.IsItemAssembly is null then
(select cast(ma.Code as varchar) as code
from materials.Material ma
inner join materials.MaterialPrice mp
on ma.ID=mp.MaterialID
and mp.HistoryStatusID=2
where cd.ItemID=ma.ID
)
else
(select cast(ass.Code as varchar) as code
from Materials.tblAssemblies ass
where cd.ItemID=ass.Assembly_ID
and ass.HistoryStatusID=2
)
end,
isnull(cd.IsItemAssembly,0) as IsItemAssembly,
cd.ReferredItemID,
ReferredCode =
case
when cd.IsReferredItemAssembly=0 or cd.IsReferredItemAssembly is null then
(select cast(ma.Code as varchar) as code
from materials.Material ma
inner join materials.MaterialPrice mp
on ma.ID=mp.MaterialID
and mp.HistoryStatusID=2
where cd.ReferredItemID=ma.ID
)
else
(select cast(ass.Code as varchar) as code
from Materials.tblAssemblies ass
where cd.ReferredItemID=ass.Assembly_ID
and ass.HistoryStatusID=2
)
end,
isnull(cd.IsReferredItemAssembly,0) as IsReferredItemAssembly,
cd.Factor,
cd.LinkedCalculatorID,
cast(lc.Name as varchar) as LinkedCalcName,
cd.CalculatorRuleID,
cast(cr.Name as varchar) as RuleName,
cast(cr.Code as varchar) as RuleCode
from dbo.Calculator ch
inner join dbo.CalculatorDetail cd
on ch.ID = cd.CalculatorID
and ch.IsActive = 1
inner join dbo.CalculatorRule cr
on cd.CalculatorRuleID=cr.ID
left join dbo.Calculator lc
on lc.ID = cd.LinkedCalculatorID
and lc.IsActive = 1
where ch.ID=@CalculatorID
order by cd.RunOrder
My attempt:
var query = (from ch in dbContext.Calculators
join cd in dbContext.CalculatorDetails on ch.ID equals cd.CalculatorID where ch.IsActive == true
join cr in dbContext.CalculatorRules on cd.CalculatorRuleID equals cr.ID
join lc in dbContext.Calculators on cd.LinkedCalculatorID equals lc.ID where lc.IsActive == true
where ch.ID == calculatorIDParameter
orderby cd.RunOrder
select new GetCalculatorMaterialsModel
{
id = cd.ID,
RunOrder = cd.RunOrder,
ItemId = cd.ItemID,
ReferredItemID = cd.ReferredItemID,
ReferredCode =
IsReferredItemAssembly = cd.IsReferredItemAssembly == null ? false : true,
Factor = cd.Factor,
LinkedCalculatorID = cd.LinkedCalculatorID,
LinkedCalcName = lc.Name,
CalculatorRuleID = cd.CalculatorRuleID,
RuleName = cr.Name,
RuleCode = cr.Code
}).ToList();