猿问

简化多个真假组合条件

问题是我想从 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 个案例。


慕桂英546537
浏览 191回答 3
3回答

梦里花落0921

将您的权限值放入数组中!!如果您坚持使用当前的变量,您可以这样做: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')

阿波罗的战车

好吧,我想我会在我自己弄清楚如何做后回答这个问题,但真的很感谢大家的建议。它将是纯 SQL,就像这样:sql = "SELECT * from requestsTable WHERE priv IN (SELECT priv FROM privilegesTable WHERE userID=@userID)
随时随地看视频慕课网APP
我要回答