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像这样通过循环调用它

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

然后对于您拥有的每个对象,首先将它们放入您List的 byfor 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(来自评论):

如果它是 aDataTable我们仍然可以解析它(因为一个DataTable意味着乘以相同的数据class)。为了解决这个问题,我认为最好还是声明一个代表数据表中一行的类。但是在您的情况下,一行是 250 列。这是很多。除非我们知道每个数据的类型,否则无法正确放置行。但是由于数据列的数量很多,我可以进一步建议您执行以下两个替代选项之一:

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

第二种方法是使用数据表的列信息来获取每个单独列的数据类型。虽然列数很多,但数据类型的数量更加有限。然后,您需要创建一种通用方法来将每种数据类型映射到 C# 中等效类型的生成数据。然后对于 250 列中的所有数据,您可以使用此泛型类的方法根据您的流程将其转换为 VB.Net 数据类型,反之亦然。此方法更有效且持久,但您可能会发现创建泛型有点麻烦班级。但是这样你就不需要改变你的桌子

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

于 2016-01-04T09:25:55.207 回答