我有一个课程如下
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实现吗?
编辑:抱歉没有提到这个,上面的列表可能有动态属性,所以我只想检查它是否可以动态完成?
答案 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();