在列表中将列表拆分为多个列表

时间:2015-04-29 09:17:12

标签: c# linq

我有一个课程如下

 public class Flight
  {
    public int CompanyId { get; set; }
    public int Number { get; set; }
    public int Set{get;set;}

    public Flight(int companyId, int number, int set)
    {
        this.CompanyId = companyId;
        this.Number = number;
        this.Set=set;
    }
}

我有一个这种类型的列表

var flights = new List<Flight>
            {
                new Flight(10, 10000,1), 
                new Flight(20, 20000,2), 
                new Flight(30, 30000,3),
                new Flight(40, 40000,4),
                new Flight(50, 50000,5),
            };

我想将此列表拆分为3个列表或对象[],每个属性类型为int(或其所属的类型),预期结果为

        object[] lista = { 10, 20, 30, 40, 40 };
        object[] listb = { 1000, 2000, 3000, 4000, 5000 };
        object[] listc = { 1, 2, 3, 4, 5 };

这可以通过linq实现吗?

编辑:抱歉没有提到这个,上面的列表可能有动态属性,所以我只想检查它是否可以动态完成?

2 个答案:

答案 0 :(得分:3)

只需选择属性并将其转换为数组:

var lista = flights.Select(f => f.CompanyId).ToArray();
var listb = flights.Select(f => f.Number).ToArray();
var listc = flights.Select(f => f.Set).ToArray();

答案 1 :(得分:2)

你去吧

List<List<Flight>> result = flights
  .GroupBy(Flight => Flight.PropertyA)
  .Select(g => g.ToList())
  .ToList();

如果在类中添加更多属性而不进行任何修改,则上述方法将进行缩放。如果你的课程是固定的,那么就这样做,

var listCompanyId = flights.Select(f => f.CompanyId).ToArray();
var listNumber = flights.Select(f => f.Number).ToArray();
var listSet = flights.Select(f => f.Set).ToArray();