我正在尝试在基本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的任何想法?我尝试了一个枚举,但这只是使它太冗长 - 我希望这是一个相当容易使用的库。
答案 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