代码之家  ›  专栏  ›  技术社区  ›  squillman Johnny Fitz

数据传输对象(DTO)到显示对象(DO)-如何将DTO展平到DO集合属性中

  •  1
  • squillman Johnny Fitz  · 技术社区  · 14 年前

    我想用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)
    

    产品、位置和月份都继承自LookupEntity,如下所示:

    public class LookupEntity {
        string Name,
        int Id
    }
    

    然后我有一个这样的动作:

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

    DataValue是一个值对象,其外观如下:

    public class DataValue {
        MonthPeriod Month
        double Data
    }
    

    换句话说。。。

    下面是一个示例源数据集:

    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来获取DO的2个实例,每个实例都有一个包含3个DataValue实例的列表。

    1 回复  |  直到 12 年前
        1
  •  2
  •   Amy B    14 年前
    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()
    };
    

    由于产品、位置和月份可能是引用类型-请注意引用的相等性。