2011-04-22 48 views
0

我一直在反对这个问题我的头撞了几个小时现在,如果任何人在这里可以提供任何指针,我将不胜感激。我想我现在被这个人蒙上了一层阴影,所以一组新的脑细胞可能会看到一个非常简单的解决方案!.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 

因此,我的“转换”方法需要采用SourceOption列表并构建库存列表(使用Attrib茨)作为解释在这里:

子转换()

'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 

末次

我希望是十分明显的,在此之前我撕所有我的头发出任何反馈真的可以理解!

感谢 卡尔

回答

1

我想你会发现有帮助的look here在ValueInjecter。通过应用您可以定义的一些约定,它可以帮助您将对象转换为对象。

相关问题