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

来源:互联网 发布:u盘恢复数据要多少钱 编辑:程序博客网 时间:2024/06/04 23:26
并列状态值和工作流状态值的位图处理思路
[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表达式时较繁琐


工作流状态值的位图思路
分析工作流中每一步的各原子状态,并取并集定义静态变量或宏。
每一步的各原子状态作为一个新代码值存入对应的代码表中。
原创粉丝点击