我有整数数组,我必须检查项目是否符合逻辑条件。 例如:
array: [1, 4, 17, 22, 45]
condition: 1 AND 17 AND (22 OR 49)
如何检查数组的元素是否满足条件。 我将数据库元素存储在DB中,作为具有公共标识符的行:
ID_1 | 1
ID_1 | 4
ID_1 | 17
ID_1 | 22
ID_1 | 45
如果有人知道如何通过SQL检查这些值是否满足条件或跨数组搜索,我将不胜感激。
答案 0 :(得分:1)
也许是这样的:
Module StartupModule
Sub Main()
Dim nums() As Integer = {1, 4, 17, 22, 45}
Dim hasNumbers As Func(Of Integer(), Boolean) = Function(arr)
Return arr.Contains(1) AndAlso arr.Contains(17) AndAlso (arr.Contains(22) OrElse arr.Contains(49))
End Function
Dim result As Boolean = hasNumbers(nums)
Console.WriteLine(result)
Console.ReadLine()
End Sub
End Module
修改强>
它不会像刚刚读到的那样,条件会是什么。所以我会使用expression trees。
答案 1 :(得分:0)
我假设您要查找包含料品ID 1 AND 17 AND(22 OR 49)的发票。然后就可以了
SELECT invoice_id
FROM items
WHERE item_id IN (1, 17, 22)
GROUP BY invoice_id
HAVING COUNT(*) = 3
UNION
SELECT invoice_id
FROM items
WHERE item_id IN (1, 17, 49)
GROUP BY invoice_id
HAVING COUNT(*) = 3
仅当item_id
每张发票唯一时才有效。
答案 2 :(得分:0)
我在反向逻辑中找到了一个解决方案。对于表示项目的条件中的每个元素(不是大括号或逻辑操作数,所以整数),我检查它是否是数组的元素。如果是,则将其替换为true,否则替换为fasle。 所以我得到这样的东西:
array: [1, 4, 17, 22, 45]
original conditions
condition A: 1 AND 17 AND (22 OR 49)
condition B: 17 AND 45
will turn into
condition A: true AND true AND (true OR false)
condition B: true AND true
然后我只需要创建将使用布尔表达式将字符串计算为true或false的函数。
这里is example如何评估逻辑表达式。
所以我没有用条件测试数组,然后检查数组中是否存在条件,并用true / false替换它们。有了这个,我得到了一个应该被评估的逻辑表达式。