使用LINQ将复杂对象列表转换为平面列表

时间:2012-02-01 13:30:15

标签: linq object

如下图所示,我有车辆清单。我想在CSV文件中显示这个,所以为了做到这一点,我想要压扁这个列表:

 class Vehicle
{
    int vid;
    string name;
    string desc;
    CarType car;
    TruckType truck;
    TankType tank;       
}

class CarType
{
    int id;
    string color;
    string manual;
    string model;      
}

class TruckType
{
    int id;
    string width;
    string heigh;       
}

class TankType
{
    int id;
    string color;
    string size;       
}

如何将所有属性(包括复杂属性中的属性)放入平面列表中。 如何使用linq?

1 个答案:

答案 0 :(得分:1)

这将创建一个包含所有展平字段的匿名对象,假设它们是公开的。

var flat = vehicles.Select(x => new {
    vid = x.vid,
    name = x.name,
    desc = x.desc,
    carId = x.car.id,
    carColor = x.car.color;
    carManual = x.car.manual;
    carModel = x.car.model; 
    truckId = x.truck.id,
    truckWidth = x.truck.width,
    truckHeigh = x.truck.heigh,
    tankId = x.tank.id,
    tankColor = x.tank.color,
    tankSize = x.tank.size
});

顺便说一下,你应该使用属性而不是暴露字段。