0

値が構造体ではなく辞書に格納されている新しいレコードを挿入することはできますか? 私はこのコードを見てきました:

Dim ord As New Order With _
{.OrderID = 12000, _
 .ShipCity = "Seattle", _
 .OrderDate = DateTime.Now}

' Add the new object to the Orders collection.
db.Orders.InsertOnSubmit(ord)

しかし、各レコードのデータテーブルに追加する 250 の奇数の値/フィールドがあり、すべての列フィールドを定義して上記の例のようなクラスに値を追加するよりも、辞書を使用することをお勧めします。これはできますか?

dim dctValues as new dictionary(of string,integer)
key="val" & x
'loop through calc and increase x from 1 to 250
'key goes from "val1" to "val250"
dctValues.add(key,999)
...etc for 250 fields/columns for one record
db.Orders.InsertonSubmit(dctValues)
4

1 に答える 1

1

InsertOnSubmitが辞書のすべての項目でうまく機能すると仮定すると、次のFor Eachように Loopで呼び出すことができます

For Each item As MyNewClass In dct.Values
    db.Orders.InsertonSubmit(item)
Next

より難しい部分は、それを定義MyNewClassして辞書に入れ、後で簡単に処理できるようにすることです

Dim dctValues As New Dictionary(Of String, MyNewClass) 'Note the Value is MyNewClass

編集:

. _ List_ MyNewClass_ OrderID_ ShipCity_OrderDate

Public Class MyNewClass
    Public OrderID As Integer
    Public ShipCity As String
    Public OrderDate As Date
End Class

Keyただし、アイテムを追加するときに を配置する必要はありません。

Dim list As List(Of MyNewClass) 'List declaration, later will have 250 items

次に、持っているオブジェクトごとに、まずそれらをListbyfor loopに入れ、次にそれをデータベースに入れます

For Each item As MyNewClass In list
    db.Orders.InsertonSubmit(item) 'no need to submit per item, but using For Each loop
Next    

編集2(コメントから):

それが であるDataTable場合でも、それを解析できます (DataTable同じ のデータを乗算することを意味するためclass)。それを解決するには、データ テーブルの行を表すクラスを宣言するのが最善だと思います。ただし、この場合の 1 行は 250 列です。これはたくさんあります。また、各データの型がわからない限り、行を正しく配置する方法はありません。ただし、データ列の数が非常に多いため、次の 2 つの代替オプションのいずれかを実行することをお勧めします。

最初の方法は、データ関係が第 3 正規形である複数のテーブルにテーブルを分割することです (詳細については、こちらを参照してください)。このようにして、データのサイズを最小限に抑え、データ関係の構造を適切にします。この方法では、いくつかの小さなテーブルができてしまいますが、持続可能性と拡張性のために行う価値があります。人々が考慮する第 3 正規形の唯一のコストは、通常、クエリの速度です。ただし、250 列の 100 レコードでは、この問題は発生しません。

2 番目の方法は、データ テーブルの列情報を使用して、個々の列のデータ型を取得することです。列の数は豊富ですが、データ型の数はより制限されています。次に、C# で各データ型を同等の型の生成データにマップする汎用的な方法を作成する必要があります。次に、250 列のすべてのデータに対して、このジェネリック クラスのメソッドを使用して、プロセスに従って VB.Net データ型に変換します。この方法はより効率的で永続的ですが、ジェネリックを作成するのに少し問題があるかもしれません。クラス。ただし、この方法ではテーブルを変更する必要はありません

通常、人々がこの問題をより構造的に2 番目の方法で解決するのは、再利用性のためです。X列とYレコードの新しいケースが与えられた場合、以前のソリューションを新しい問題に使用できます。しかし、この 1 セットのデータでさらに多くのことを試す場合、最初の方法を選択することは悪い選択ではありません。あるいは、最初の方法も 2 番目の方法もあなたの状況に合わない場合は、class250 メンバーでa を宣言するのに苦労するかもしれません

于 2016-01-04T09:25:55.207 に答える