2010-10-18 58 views
1

我想將使用LINQ的DTO合併爲一個DO,但是我的LINQ-fu很薄弱。數據傳輸對象(DTO)到DisplayObject(DO) - 如何將DTO平鋪爲DO集合屬性

我的DTO是這樣的:

public class DTO { 
    Product product, 
    Location location, 
    MonthPeriod month, 
    double Data 
} 

,並映射到這個模式的SQL數據庫表:

ProductID int, 
LocationID int, 
MonthPeriodID int, 
Data numeric(18,6) 

產品,位置和月均來自LookupEntity繼承看起來像這樣:

public class LookupEntity { 
    string Name, 
    int Id 
} 

然後我有一個DO,看起來像這樣:

public class DO { 
    Product product, 
    Location location, 
    IList<DataValue> values 
} 

DataValue是一個值對象,看起來像這樣:

public class DataValue { 
    MonthPeriod Month 
    double Data 
} 

我只是罰款使用NHibernate得到DTO的名單,但我讓他們壓扁到我的做題。我想用LINQ來創建DO的。我需要做什麼才能獲得按產品和位置關閉的DO集合,並且包含按月包含數據的DataValue對象列表?

換句話說...

下面是一個示例的源數據集:

 
Product:    Location:   Month:    Data: 
ProductA    MI     Jan     10 
ProductA    MI     Feb     20 
ProductA    MI     Mar     30 
ProductB    CA     Jan     100 
ProductB    CA     Feb     200 
ProductC    CA     Mar     300 

我可以得到映射到DTO就好了。我現在想用LINQ來獲得2個DO實例,每個實例都有一個包含3個DataValue實例的列表。

回答

2
from x in DTOs 
group new DataValue() {MonthPeriod = x.Month, Data = x.Data} 
    by new {Product = x.Product, Location = x.Location} 
    into g 
select new DO() 
{ 
    product = g.Key.Product, 
    location = g.Key.Location, 
    value = g.ToList() 
}; 

由於產品,位置和月份可能是引用類型 - 請注意參考平等。

+0

完美。非常感謝你! – squillman 2010-10-18 03:01:58

相關問題