【问题标题】:Data Transfer Object (DTO) to DisplayObject (DO) - How to flatten DTO's into a DO collection property数据传输对象 (DTO) 到 DisplayObject (DO) - 如何将 DTO 展平为 DO 集合属性
【发布时间】:2010-10-18 02:26:19
【问题描述】:

我想使用 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 实例的列表。

【问题讨论】:

    标签: c# linq mapping dto displayobject


    【解决方案1】:
    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 可能是引用类型 - 请注意引用相等性。

    【讨论】:

    • 完美。非常感谢!
    猜你喜欢
    • 2021-02-19
    • 2014-01-25
    • 2012-12-20
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多