1

我想使用 LINQ 将一组 DTO 扁平化为一个 DO,但我的 LINQ-fu 很弱。

我的 DTO 如下所示:

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

并映射到具有此架构的 SQL 数据库表:

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

Product、Location 和 Month 都继承自 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 的列表,但我在将它们扁平化到我的 DO 时遇到了问题。我想使用 LINQ 来创建 DO。我需要做些什么来获得一个从 Product 和 Location 中键入的 DO 集合,其中包含按月包含数据的 DataValue 对象列表?

换句话说...

这是一个示例源数据集:

产品: 地点: 月份: 数据:
产品A MI 1月10日
ProductA MI 2 月 20 日
产品A MI 3 月 30 日
ProductB CA 100 年 1 月
ProductB CA 200 年 2 月
ProductC CA 300 年 3 月

我可以将它映射到 DTO 就好了。我现在想使用 LINQ 获取 2 个 DO 实例,每个实例都有一个包含 3 个 DataValue 实例的列表。

4

1 回答 1

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()
};

由于 Product、Location 和 Month 可能是引用类型 - 请注意引用相等性。

于 2010-10-18T02:44:27.987 回答