Я не считаю это хорошим решением, но оно делает то, что вы просили, а именно: «Делайте это в LINQ».
Это также, вероятно, не самое эффективное решение.
string FirstName ="John1, John2, John3";
string MiddleInitial = "K1, K2, K3";
string LastName = "Kenndey1, Kenndey2, Kenndey3";
List<String> fn = new List<String>(FirstName.Split(','));
List<String> mi = new List<String>(MiddleInitial.Split(','));
List<String> ln = new List<String>(LastName.Split(','));
IEnumerable<NameDetails> result = from f in fn
join i in mi on fn.IndexOf(f) equals mi.IndexOf(i)
join l in ln on fn.IndexOf(f) equals ln.IndexOf(l)
select new NameDetails {f, i, l};
Я использовал LINQPad , чтобы сначала попробовать это (с анонимным классом, а не с именем NameDetails).