I have the following classes:
public class Owner
{
public string Id { get; set; }
public string Name { get; set; }
}
public class Main
{
public s
List<Main> mainList = ...
var flatList = (
from main in mainList
from owner in main.Owners
select new FlatList {
Id = main.Id, Name = main.Name,
OwnerId = owner.Id, OwnerName = owner.Name
}).ToList();
You can do that using linq (secret looping behind the scenes):
from m in mainList
from o in m.Owners
select new FlatList
{
Id = m.Id,
Name = m.Name,
OwnerId = o.OwnerId ,
OwnerName = o.OwnerName
};
You should use SelectMany to flatten a sequence of Main objects:
Projects each element of a sequence to an IEnumerable and flattens the resulting sequences into one sequence.
So it projects each Main object into sequence of FlatList
objects and then flattens resulting sequences into one FlatList
sequence
var flatList = mainList.SelectMany(m =>
m.Owners.Select(o =>
new FlatList {
Id = m.Id,
Name = m.Name,
OwnerId = o.Id,
OwnerName = o.Name
})).ToList()