并列状态值和工作流状态值的位图处理思路

并列状态值和工作流状态值的位图处理思路
[C# code]
// 定义宏
        public static int IS_DEL = 1;
        public static int IS_SHOW = 2;
        public static int IS_USING = 4;


        public void Test()
        {
            // order是主表,orderc是order对应的代码表,使用位图的思路进行状态的过滤
            var order = this.DbSession.TOrderDal.GetQueryable(x => true);
            var orderc = this.DbSession.TOrderCodeDal.GetQueryable(x => true);
            var rc = from o in order
                     join oc in orderc // 连代码表无非是要中文的值,真正的过滤只使用主表即可
                     on o.OStatus equals oc.OCID
                     select new {
                         o,
                         oc,
                     };
            rc = rc.Where(x => (x.oc.OCID | TOrderService.IS_DEL) == TOrderService.IS_DEL);
            var rc2 = rc.ToList();
        }


        /*
        exec sp_executesql N'SELECT 
    [Extent2].[OCID] AS [OCID], 
    [Extent1].[OGUID] AS [OGUID], 
    [Extent1].[OName] AS [OName], 
    [Extent1].[OStatus] AS [OStatus], 
    [Extent2].[OCVal] AS [OCVal]
    FROM  [dbo].[TOrder] AS [Extent1]
    INNER JOIN [dbo].[TOrderCode] AS [Extent2] ON [Extent1].[OStatus] = [Extent2].[OCID]
    WHERE (([Extent2].[OCID]) | (@p__linq__0)) = @p__linq__1',N'@p__linq__0 int,@p__linq__1 int',@p__linq__0=1,@p__linq__1=1
go
            */


位图状态值的好处:
1.位与位之间不受影响,位的职责单一。
2.无论流程怎么变化,一些无关的位最多不使用。
3.无论流程怎么变化,只需要关心正在使用着的代码值 & 所需条件是否等于所需条件即可,不用修改代码表。


位图状态值的缺点:
1.维护新旧代码值时容易出现冗余
2.编写SQL或者Linq表达式时较繁琐


工作流状态值的位图思路
分析工作流中每一步的各原子状态,并取并集定义静态变量或宏。
每一步的各原子状态作为一个新代码值存入对应的代码表中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值