EF实现查询结果集优先级

业务开发中经常遇到
案例:
条件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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值