2012-02-01 47 views
0

我有如下所示的车辆列表。我想在CSV文件中显示这一点,所以为了做到这一点我想拉平这个名单:使用LINQ将复杂对象列表转换为平铺列表

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

为什么你认为你需要所有这些属性“扁平”?如果您自己编写CSV编写代码,这不会有什么区别 – BrokenGlass 2012-02-01 13:33:25

+0

我已经使用反射的扩展方法。我这样做:MyObject.ToCSV()并创建一个包含所有属性的CSV文件,但不适用于复杂的属性。 – DevUser 2012-02-01 13:41:34

+0

看来,XML将是一个比CSV更好的解决方案 – msmucker0527 2012-02-01 13:41:56

回答

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

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