gpt4 book ai didi

c# - 将带有 FlagsAttribute 的枚举解析为 SqlParameter

转载 作者:太空狗 更新时间:2023-10-29 22:24:14 24 4
gpt4 key购买 nike

我有一个带有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com