VB.NET:编写一个采用特定类型,多个键值参数的函数

时间:2013-05-16 10:56:13

标签: vb.net function collections parameters

我正在尝试在基本MVC(实验项目)中编写一个函数,该函数应该使用以下(或接近)调用:

datastore = myTable.FetchData({{column1, constraint1}, 
                  {column2, constraint2}, ... 
                  {colN, conN}})

功能目的 - 查询传递给它的约束的表。例如,

FetchData({{Me.Fields("Price"), "<100"}, {Me.Fields("Type"), "=Component"}})

最终会产生查询

SELECT * FROM table a WHERE Price < 100 AND Type = "Component"

(查询生成比涉及更多,涉及定义的关系等等,但这不在本问题的范围内)

如何编写函数定义来获取这些参数?

`Public Function FetchData( ??? ) As foobar

基本上,它将类似于Dictionary,因为它是一对值列表。但是,它需要非唯一(例如,可以调用它来生成col1 > 1 AND col1 < 5。还考虑了二维arraylist,但是对中的每一半都需要是特定类型 - 'key'需要是我的ColumnDefinition对象类型或字符串,'value'应该始终是字符串。

处理此问题的最佳方法是什么?

奖金问题:将运算符与约束("=component")合并似乎很难看。有关如何将操作符分隔写入函数def的任何想法?我尝试了一个枚举,但这只是使它太冗长 - 我希望这是一个相当容易使用的库。

2 个答案:

答案 0 :(得分:2)

如果您使用的是.NET 4.0或更高版本,建议您尝试使用Tuple类来表示您的查询。您的代码可能如下所示。

Public Function FetchData(ByVal params As List(Of Tuple(Of ColumnDefinition, Char, String))) As foobar

仅在您可以控制的API下推荐使用元组,其中上下文显而易见。如果这是公共或共享API,建议创建具有适当属性的命名类(如Nico Schertler的评论中所述)。然后,代码可能看起来像。

Public Function FetchData(ByVal params As List(Of MyContainerClass)) As foobar

希望这有帮助。

答案 1 :(得分:0)

或者根据你所描述的函数调用的形状,如果你肯定使用字符串,它总是{“Col”,“Constraint”}那么你可以这样做

Public Function FetchData(ByVal MultiDimensionArray(,) As String)
    'this is then how you could pull the pairs of cols and constraints back out
    'where n is the col constraint pair count up to (n) number
    For n As Integer = 0 To MultiDimensionArray.Length - 1
        Dim Col As String = MultiDimensionArray(0, n)
        Dim Constraint As String = = MultiDimensionArray(1, n)
    Next
End Function