并列状态值和工作流状态值的位图处理思路
[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表达式时较繁琐
工作流状态值的位图思路
分析工作流中每一步的各原子状态,并取并集定义静态变量或宏。
每一步的各原子状态作为一个新代码值存入对应的代码表中。
[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表达式时较繁琐
工作流状态值的位图思路
分析工作流中每一步的各原子状态,并取并集定义静态变量或宏。
每一步的各原子状态作为一个新代码值存入对应的代码表中。