[英]C# linq build table from sub list of list
在linq查詢的結果中,我想獲取應該包含以下內容的List<Record> records
:
Id=1, Number=1,Weight=23,Street="Testing street"
Id=1, Number=1,Weight=23,Street="Testing street"
Id=1, Number=1,Weight=23,Street="Testing street"
Id=1, Number=1,Weight=23,Street="Testing street"
Id=1, Number=1,Weight=23,Street="Testing street"
Id=1, Number=1,Weight=23,Street="Testing street"
碼:
namespace ConsoleApplication24
{
class Program
{
static void Main(string[] args)
{
List<Train> Depos = new List<Train>();
Train train = new Train();
train.Id = 1;
List<Wagon> wagons = new List<Wagon>();
wagons.Add(new Wagon { Number = 1, Weight = 23 });
wagons.Add(new Wagon { Number = 1, Weight = 23 });
wagons.Add(new Wagon { Number = 1, Weight = 23 });
wagons.Add(new Wagon { Number = 1, Weight = 23 });
wagons.Add(new Wagon { Number = 1, Weight = 23 });
wagons.Add(new Wagon { Number = 1, Weight = 23 });
train.Wagons = wagons;
Depos.Add(train);
List<Adress> Adresses = new List<Adress>();
Adress adress = new Adress();
adress.Id = 1;
adress.Street = "Testing street";
Adresses.Add(adress);
List<Record> records = (from dep in Depos join adr in Adresses on dep.Id equals adr.Id select new Record { Id = dep.Id }).ToList();
}
}
public class Record
{
public int Id { get; set; }
public int Weight { get; set; }
public string Street { get; set; }
public int Number { get; set; }
}
public class Train
{
public int Id { get; set; }
public List<Wagon> Wagons { get; set; }
}
public class Wagon
{
public int Weight { get; set; }
public int Number { get; set; }
}
public class Adress
{
public int Id { get; set; }
public string Street { get; set; }
}
}
做這個的最好方式是什么?
您需要使用SelectMany
,或者在查詢語法中使用, from
只需一秒鍾,即可拉平列表列表:
List<Record> records =(from dep in Depos
join adr in Adresses on dep.Id equals adr.Id
from wgn in dep.Wagons
select new Record
{
Id = dep.Id,
Number = wgn.Number,
Weight = wgn.Weight,
Street = adr.Street
}).ToList();
或具有擴展方法的可讀性較低的LINQ :)
IEnumerable<Record> records =
Depos.Join(Adresses,
myTrain => train.Id,
addr => addr.Id,
(myTrain, addr) => myTrain.Wagons
.Select(wagon => new Record
{
Id = addr.Id,
Street = addr.Street,
Number = wagon.Number,
Weight = wagon.Weight
}))
.SelectMany(myWagons => myWagons);
如您所見, SelectMany
方法是此查詢的關鍵方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.