using System.Collections.Generic;
public Data(int? col1, int? col2)
public static IEnumerable<int> GetRecusive(List<Data> source, int val)
var q = new Queue<int>();
var current = q.Dequeue();
var potential = source.Where(x => x.Col1 == current && x.Col2 != null);
foreach (var item in potential)
yield return item.Col2.Value;
q.Enqueue(item.Col2.Value);
public static void Main()
var list = new List<Data>()
{new Data(1, 14), new Data(2, 17), new Data(1, 2), new Data(4, null), new Data(1, 3), new Data(20, 4), new Data(17, null), new Data(2, 20), new Data(14, 6), new Data(14, null), new Data(6, null), new Data(3, 30), new Data(3, 19), };
var results = GetRecusive(list, 1);
Console.WriteLine(string.Join(", ", results));