使用字典插入新记录

Insert new record using a dictionary

是否可以在值存储在字典而不是结构中的位置插入新记录?我看过这段代码:

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 条奇数 values/fields 可以为每条记录添加到数据表中,我更愿意使用字典而不是像示例那样定义所有列字段并在 class 中添加值多于。这能做到吗?

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)

假设 InsertOnSubmit 适用于你字典中的每一项,你可以通过 For Each 循环调用它

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 并处理三个变量 OrderIDShipCityOrderDate.

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

然后对于您拥有的每个对象,首先通过 for loop 将它们放入您的 List,然后通过

将其放入数据库
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 的乘法数据)。为了解决这个问题,我认为最好还是声明一个 class 来表示数据 table 中的一行。但是在你的情况下,一行是 250 列。这是很多。除非我们知道每个数据的类型,否则无法正确放置行。但是由于数据列的数量很多,我可以进一步建议您执行以下两个备选方案之一:

第一种方式是将table拆分为多个table,数据关系为第三范式(请查看更多相关信息) .通过这种方式,您可以最大限度地减少数据的大小,并将拥有良好的数据关系结构。这种方式将使您最终得到几个较小的 table,但为了可持续性和可扩展性,这样做是值得的。人们考虑的第三范式的唯一成本通常是查询速度。但是250列的100条记录不会出现这个问题。

第二种方法 是使用数据的列信息table 来获取每个单独列的数据类型。虽然列数很多,但数据类型的数量比较有限。然后,您需要创建一种通用方法,将每种数据类型映射到 C# 中等效类型的生成数据。然后对于 250 列中的所有数据,您使用这种通用的 class' 方法将其转换为 VB.Net 数据类型,反之亦然,根据您的 process.This 方法更有效和持久,但您创建通用 class 可能会遇到一些麻烦。但是这样你就不需要改变你的 table

为什么通常人们使用第二种方法 更结构化地解决这个问题是因为可重用性。给定具有 X 列和 Y 记录的新案例,以前的解决方案可用于解决新问题。但是如果你更多地使用这组数据,那么第一种方式是一个不错的选择。或者,如果第一个和第二个都不适合您的情况,那么是的,您可能会费力地声明一个 class 有 250 个成员