为了账号安全,请及时绑定邮箱和手机立即绑定

简化多个真假组合条件

简化多个真假组合条件

C#
慕桂英546537 2021-07-15 14:11:04
问题是我想从 SQL 表中提取特定记录并根据用户权限显示它(这是 5 组合真或假的情况)。有没有办法避免为组合的 5 个特权为真或假的所有情况编写 32 个单独的检查和 32 个单独的 SQL 选择语句?前任:bool priv1 true|false;bool priv2 true|false;bool priv3 true|false;bool priv4 true|false;bool priv5 true|false;if (priv1 && !priv2 && !priv3 && !priv4 && !priv5){    string sql = "SELECT * FROM table WHERE priv='1'";}等等....编辑:我想提一下,一个用户可以拥有多个权限,这是主要问题,也是为什么我说 32 个案例。
查看完整描述

3 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

将您的权限值放入数组中!!如果您坚持使用当前的变量,您可以这样做:


bool[] privileges = new bool[] { priv1, priv2, priv3, priv4, priv4 };

一旦它们在那里,您就可以使用 LINQ 生成 IN 子句:


var list = privileges

    .Select

    ( 

        (p,i) => new

        { 

            Index = i + 1, //Need to add 1, since array is zero-based

            Value = p 

        } 

    )

    .Where

    ( 

        p => p.Value 

    )

    .Select

    ( 

        p => string.Format("'{0}'", p.Index)

    );


var sql = string.Format

    (

        "SELECT * FROM table WHERE priv IN ({0}) ",

        string.Join(",", list)

    );

这将为您提供以下格式的 SQL 字符串:


SELECT * FROM table WHERE priv IN ('1','2')


查看完整回答
反对 回复 2021-07-18
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

好吧,我想我会在我自己弄清楚如何做后回答这个问题,但真的很感谢大家的建议。

它将是纯 SQL,就像这样:

sql = "SELECT * from requestsTable WHERE priv IN (SELECT priv FROM privilegesTable WHERE userID=@userID)


查看完整回答
反对 回复 2021-07-18
  • 3 回答
  • 0 关注
  • 190 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信