C# 如何通过标志bigint列对T-SQL集进行分组
我正在从事一个项目,其中搜索功能的效率至关重要 我有几个标志列(如c#中的枚举标志)。搜索这些数据非常快(往返3毫秒),但我现在遇到了麻烦,我必须执行组计数 因此,我有一个“A”项,它包含红色(1)、白色(8)和蓝色(64),因此“颜色”列包含数字73 要搜索,我可以使用此选项搜索带有红色的项目C# 如何通过标志bigint列对T-SQL集进行分组,c#,linq,tsql,bitwise-operators,C#,Linq,Tsql,Bitwise Operators,我正在从事一个项目,其中搜索功能的效率至关重要 我有几个标志列(如c#中的枚举标志)。搜索这些数据非常快(往返3毫秒),但我现在遇到了麻烦,我必须执行组计数 因此,我有一个“A”项,它包含红色(1)、白色(8)和蓝色(64),因此“颜色”列包含数字73 要搜索,我可以使用此选项搜索带有红色的项目 Declare @colour int set @colour = 1 Select * From Items Where (Colour & @colour) > 0 这很有效
Declare @colour int
set @colour = 1
Select *
From Items
Where (Colour & @colour) > 0
这很有效。现在我要把它分组(也超级快速)
因此,如果我总共有8项,5项包含红色,3项包含白色,7项包含蓝色,结果如下所示:
Colour Qty
------------------
1 5
8 3
64 7 ( I don't have to worry about the name )
那么:有没有办法把数字73按位分成几组呢
(第2部分:如何将其转换为Linq到SQL?)
如有任何建议,将不胜感激
谢谢^ ^好的-我想我已经找到了最好的解决方案: 我用cte尝试了一个视图:
with cte as (
select cast(1 as bigint) as flag, 1 pow
union all
select POWER(cast(2 as bigint),pow), pow + 1
from cte
where flag < POWER(cast(2 as bigint),62)
)
, cte2 as (
select flag from cte
union select -9223372036854775808
)
更快^ ^您有一个枚举。在SQL Server中,可以使用CHECK constant:。enum Color{RED=1,WHITE=8,BLUE=64}感谢您查找@jdweng,但我想我现在找到了答案^_^
select Flag, Count(*)
From FlagValues fv
inner join Items i on (fv.Flag & i.Colour)