List sourceNumbers = new List { 2, 4, 8, 16, 32, 64, 128 }; var ram = new Random(); foreach (var source in sourceNumbers) { var index = sourceNumbers.IndexOf(source) + 1; //Console.WriteLine("index=" + index); List> result = new List>(); string sb = ""; List sb2 = new List(); for (int i = 1; i <= source; i++) { List test = new List(); List test2 = new List(); for (int j = 1; j <= index; j++) { test2.Add(new Test() { i = j, b = ram.Next(1, 222) % 2 == 0 }); sb += $"[{test2.Last().b}:{test2.Last().i}]"; //sb2 += $"[{test2.Last().b}:{test2.Last().i}]"; if (j == index) { if (sb2.Count > 0 && sb2.Contains(sb)) { j = 0; sb = ""; test2 = new List(); } else { test.AddRange(test2.Select(x => new Test { b = x.b, i = x.i })); sb2.Add(sb); sb = ""; } } } test = test.OrderBy(it => it.i).ToList(); result.Add(test); } foreach (var test in result) { List res = new List(); List res2 = new List(); foreach (var item in test) { if (item.i == 1) { if (item.b == false) { res.Add($"Expression>> include{item.i}"); } else { res.Add($"Expression> include{item.i}"); } } else { if (item.b == false) { res.Add($"Expression>> include{item.i}"); } else { res.Add($"Expression> include{item.i}"); } } res2.Add("TReturn" + (item.i)); } Console.WriteLine($"ISugarQueryable Includes<{string.Join(",", res2)}>({string.Join(",", res)});"); } //Console.WriteLine("--"); } Console.ReadKey(); public class Test { public bool b { get; set; } public int i { get; set; } } //1:1 true //2: // 1 true , 2 true // 1 false , 2 true //3: // 1 true , 2 true 3 true // 1 true , 2 false 3 true // 1 false , 2 false 3 true // 1 false , 2 true 3 true