.net数据转换(一种对象类型到另一种对象类型)——循环



我已经为这个问题绞尽脑汁几个小时了,如果这里有人能提供任何建议,我将不胜感激。我想我现在被这个蒙蔽了双眼,所以一组新的脑细胞可能会看到一个非常简单的解决方案!

基本上,我从遗留数据库中提取了一些数据,需要通过构造我们自己的stock对象将其转换为我们的库存管理系统。

简化模型如下:

Public Class Stock
    Public Property Attributes As List(Of StockAttribute)
End Class
Public Class StockAttribute
    Public Property AttributeName As String
    Public Property AttributeValue As String
End Class

源数据以这个对象的形式进入:

Public Class SourceOption
    Public Property OptionName As String
    Public Property OptionValue As String
End Class

可以使用以下方法构造一些示例数据:

Function GetSourceList1() As List(Of SourceOption)
    'prepare the source data
    Dim options As New List(Of SourceOption)
    Dim opt As New SourceOption
    opt.OptionName = "Size"
    opt.OptionValue = "Small"
    Dim opt2 As New SourceOption
    opt.OptionName = "Size"
    opt.OptionValue = "Medium"
    Dim opt3 As New SourceOption
    opt.OptionName = "Size"
    opt.OptionValue = "Large"
    Dim opt4 As New SourceOption
    opt.OptionName = "Colour"
    opt.OptionValue = "Black"
    Dim opt5 As New SourceOption
    opt.OptionName = "Colour"
    opt.OptionValue = "Purple"

    options.Add(opt)
    options.Add(opt2)
    options.Add(opt3)
    options.Add(opt4)
    options.Add(opt5)
    Return (options)
End Function

Function GetSourceList2() As List(Of SourceOption)
    'prepare the source data
    Dim options As New List(Of SourceOption)
    Dim opt As New SourceOption
    opt.OptionName = "Size"
    opt.OptionValue = "40"
    Dim opt2 As New SourceOption
    opt.OptionName = "Size"
    opt.OptionValue = "41"
    Dim opt3 As New SourceOption
    opt.OptionName = "Size"
    opt.OptionValue = "42"

    options.Add(opt)
    options.Add(opt2)
    options.Add(opt3)
    Return (options)
End Function
Function GetSourceList3() As List(Of SourceOption)
    'prepare the source data
    Dim options As New List(Of SourceOption)
    Dim opt As New SourceOption
    opt.OptionName = "Size"
    opt.OptionValue = "Small"
    Dim opt2 As New SourceOption
    opt.OptionName = "Size"
    opt.OptionValue = "Large"
    Dim opt3 As New SourceOption
    opt.OptionName = "Colour"
    opt.OptionValue = "Red"
    Dim opt4 As New SourceOption
    opt.OptionName = "Colour"
    opt.OptionValue = "Blue"
    Dim opt5 As New SourceOption
    opt.OptionName = "Style"
    opt.OptionValue = "A"
    Dim opt6 As New SourceOption
    opt.OptionName = "Style"
    opt.OptionValue = "B"
    options.Add(opt)
    options.Add(opt2)
    options.Add(opt3)
    options.Add(opt4)
    options.Add(opt5)
    options.Add(opt6)
    Return (options)
End Function

因此,我的"Convert"方法需要接受SourceOption列表并构造股票列表(带属性),如下所示:

子转换()

'we need to convert the SourceOption list (in GetSourceList) into a list of Stock, each with a list of StockAttribute. So in the case of GetSourceList1 we would have
'six stock objects, each stock object containing two StockAttribute objects (one for colour and one for size):
'STOCK1 - Attribute1: Size:Small Attribute2: Colour:Black
'STOCK2 - Attribute1: Size:Medium Attribute2: Colour:Black
'STOCK3 - Attribute1: Size:Large Attribute2: Colour:Black
'STOCK4 - Attribute1: Size:Small Attribute2: Colour:Purple
'STOCK5 - Attribute1: Size:Medium Attribute2: Colour:Purple
'STOCK6 - Attribute1: Size:Large Attribute2: Colour:Purple
'in the case of GetSourceList2 we would have three stock objects with only one stockattribute each (for size):
'STOCK1 - Attribute1: Size:40
'STOCK2 - Attribute1: Size:41
'STOCK3 - Attribute1: Size:42
'in the case of GetSourceList3 we would have eigth stock objects with three stockattribute each (for size, colour and style):
'STOCK1 - Attribute1: Size:Small Attribute2: Colour:Red Attribute3: Style:A
'STOCK2 - Attribute1: Size:Large Attribute2: Colour:Red Attribute3: Style:A
'STOCK3 - Attribute1: Size:Small Attribute2: Colour:Blue Attribute3: Style:A
'STOCK4 - Attribute1: Size:Large Attribute2: Colour:Blue Attribute3: Style:A
'STOCK5 - Attribute1: Size:Small Attribute2: Colour:Red Attribute3: Style:B
'STOCK6 - Attribute1: Size:Large Attribute2: Colour:Red Attribute3: Style:B
'STOCK7 - Attribute1: Size:Small Attribute2: Colour:Blue Attribute3: Style:B
'STOCK8 - Attribute1: Size:Large Attribute2: Colour:Blue Attribute3: Style:B

结束子

我真的希望这是清楚的,任何反馈将非常感谢之前,我撕裂我所有的头发!

谢谢卡尔

我想你会发现有帮助,看看这里的valueinjector。它可以通过应用一些您可以定义的约定来帮助您从对象转换到对象。

最新更新