搜索具有逻辑条件的数组

时间:2016-01-03 20:56:20

标签: sql arrays vb.net logical-operators

我有整数数组,我必须检查项目是否符合逻辑条件。 例如:

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检查这些值是否满足条件或跨数组搜索,我将不胜感激。

3 个答案:

答案 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替换它们。有了这个,我得到了一个应该被评估的逻辑表达式。