Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过标志bigint列对T-SQL集进行分组_C#_Linq_Tsql_Bitwise Operators - Fatal编程技术网

C# 如何通过标志bigint列对T-SQL集进行分组

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 这很有效

我正在从事一个项目,其中搜索功能的效率至关重要

我有几个标志列(如c#中的枚举标志)。搜索这些数据非常快(往返3毫秒),但我现在遇到了麻烦,我必须执行组计数

因此,我有一个“A”项,它包含红色(1)、白色(8)和蓝色(64),因此“颜色”列包含数字73

要搜索,我可以使用此选项搜索带有红色的项目

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)