问题是我想从SQL表中提取特定记录并根据用户权限显示它(这是5个组合为true或false的情况)。是否有办法避免编写32个单独的检查以及32个单独的SQL select语句,对于组合的5个权限的所有true为false的情况?
例如:
<div id="head">set in middle and center</div>
<div id="main">
<img src="https://i.stack.imgur.com/9rdPN.png" alt="">
</div>
依旧......
编辑:我想提一句,一个用户可以拥有多个权限,这是主要问题,为什么我说了32个案例。
答案 0 :(得分:1)
将您的权限值放入数组中!!如果您对当前变量感兴趣,可以这样做:
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')
强制性说明:
答案 1 :(得分:0)
嗯,我想我会在自己想出怎样做之后回答这个问题,但非常感谢你们的建议。
它只是纯粹的SQL:
sql = "SELECT * from requestsTable WHERE priv IN (SELECT priv FROM privilegesTable WHERE userID=@userID)
答案 2 :(得分:-1)
这需要一些调整,但我认为这是一个想法。这基本上就是我在powershell中的做法
function Evaluate-Priv {
param([int]$p)
return Get-Random -Minimum 0 -Maximum 2
}
[array]$privs = @()
for($i = 1;$i -le 5;$i++){
switch(Evaluate-Priv($i)) {
1 { $privs += "$i," }
default { continue }
}
}
[string]$SqlCmd = @"
SELECT * FROM t WHERE t.priv in ($privs)
"@
Write-Output $SqlCmd
几次运行的结果:
SELECT * FROM t WHERE t.priv in (2, 3, 4, 5,)
SELECT * FROM t WHERE t.priv in (2, 4, 5,)
SELECT * FROM t WHERE t.priv in (1, 4, 5,)