Я изучаю LINQ и предпочитаю разделять команды, чтобы я мог знать, что и где происходит. Это, конечно, неэффективно, как принятый ответ, но, вероятно, может пригодиться любому, кто изучает LINQ.
Я предпочитаю демонстрировать на некоторых фиктивных данных
var persons = new [] {"John's", "Mike's", "Albert's"};
var objects = new [] {"car", "house", "bicycle"};
var colors = new [] {"red", "blue", "green", "yellow"};
var firstPair = persons.SelectMany(_ => objects, (p, o) => new {
Person = p,
Object = o
});
var secondPair = firstPair.SelectMany(_ => colors, (fp, c) => new {
Person = fp.Person,
Object = fp.Object,
Color = c
});
Это дает вывод в LINQ Pad, как это.
введите описание изображения здесь