作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个带有 Flags 属性的枚举。
[Flags]
public enum AlcoholStatus
{
NotRecorded = 1,
Drinker = 2,
NonDrinker = 4
}
我正在创建一个 Sqlparameter,如下所示。
new SqlParameter("@AlcoholStatus", SqlDbType.VarChar) {Value = (int) AlcoholStatus}
如果 AlcoholStatus 具有所有值(NotRecorded | Drinker | NonDrinker),它会返回 7 作为 SqlParameter 的值。
我正在为存储过程解析此参数,如果我可以将值解析为“1,2,3”,我更愿意。执行此操作的最佳方法是什么?
或者有没有其他简单的方法通过将整数值 7 解析到存储过程来过滤记录?
编辑:这发生在用户希望看到具有上述任何状态的人的功能过滤器中。这是一个相当复杂的sql查询。我在那里过滤 AlcoholStatus 如下
WHERE AlcoholStatus IN "1,2,4,"
最佳答案
撇开枚举是否有意义作为[Flags]
,IMO 存储此数据的唯一明智方式是在int
列。只需存储值 - 不需要其他任何东西。试图将其强制转换为 varchar
是错误的。数据库的工作是存储数据,而不是关心表示。
如果您需要按此进行过滤,您可以在搜索中使用按位运算符,但请注意,性能会受到影响,因为在按组合搜索时(而不是通过相等性搜索,后者可以使用非聚集索引)。如果您需要搜索任意组合,请考虑非规范化。如果您只需要搜索可预测位,那么您可以使用计算的持久索引列将它们提取出来 - 即您可以有一个自动 IsDrinker
列(bit
) 表示第 2 位。
关于c# - 将带有 FlagsAttribute 的枚举解析为 SqlParameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6086212/
我是一名优秀的程序员,十分优秀!