1

基本的な 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

基本的には、値のペアのリストであるため、ディクショナリに似たものになります。ただし、一意ではないcol1 > 1 AND col1 < 5必要があります (たとえば、生成するために呼び出すことができます)。2 次元の配列リストも考慮されていますが、ペアの各半分は特定の型である必要があります。「キー」はColumnDefinitionオブジェクト型または文字列である必要があり、「値」は常に文字列である必要があります。

これを処理する最良の方法は何ですか?

おまけの質問: 演算子を制約 ( "=component") とマージするのは見苦しく思えます。演算子を分離して関数 def を記述する方法について何か考えはありますか? 列挙型を試してみましたが、冗長になりすぎました。これをかなり使いやすいライブラリにしたいと考えています。

4

2 に答える 2

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

お役に立てれば。

于 2013-05-16T12:27:25.343 に答える