业务开发中经常遇到
案例:
条件1
条件2
条件3
条件4
优先获取满足条件的第一条数据。
解决方案: 使用SQL语句的case when 或者 EF 的 三元表达式。
var generalWorkOrder =
(
from a in db.Plat_OutPut
join b in db.Plat_LotRuleConfig
on a.LotNum equals b.LotNum
//普通料:不鍍銅,有鉛
where (!b.MatGroupNum.Contains("鍍銅") && !b.MatGroupNum.Contains("全無鉛"))
//产品别
&& (string.IsNullOrEmpty(matGroupNum) ? true : matGroupNum.Contains(b.MatGroupNum))
&& a.WorkOrderState == (int)WorkOrderStates.Waiting
&&
(
lotValue == -999 ?
true :
(
//同机台作业相邻批次阻值不能相同
b.LotValue != lotValue
)
) select new
{
//先按是否工單是否緊急
b = a.IsUrgent == true ? 5
:
//作業優先順序
(
lotValue >= 100000 ?
(
//高阻 - 中阻/高阻
(b.LotValue >= 1000 && b.LotValue <= 99900) ? 4 :
(b.LotValue >= 100000) ? 3 : -999
) :
(
//中阻 - 低阻/中阻
(lotValue >= 1000 && lotValue <= 99900)
?
(
(b.LotValue < 1000) ? 4 :
(b.LotValue >= 1000 && b.LotValue <= 99900) ? 3 : -999
)
:
//低阻 - 高阻/中阻/低阻
(b.LotValue >= 100000) ? 4 :
(
(b.LotValue >= 1000 && b.LotValue <= 99900) ? 3 : (b.LotValue < 1000) ? 2 : -999
)
)
),
a
}).Where(p=>p.b!=-999).OrderByDescending(p => p.b).Select(p=>p.a).FirstOrDefault();