using System.Collections.Generic;
public static void Main()
var skills = new List<Skill>(){
new Skill() { id=1, year = 9, xp = 95 } ,
new Skill() { id=2, year = 5 } ,
int maxYear = 10, maxXp = 100;
List<string> resultList = skills
.Where(skill => skill.year <= maxYear && skill.xp <= maxXp)
.SelectMany(skill => Enumerable.Range(skill.year, maxYear - skill.year + 1)
.SelectMany(y => Enumerable.Range(skill.xp, skill.xp == 0 ? 1 : maxXp - skill.xp + 1)
.Select(xp => xp == 0 ? $"{skill.id}-{y}" : $"{skill.id}-{y}-{xp}")))
Console.Write(string.Join(Environment.NewLine, resultList));
public int id { get; set; }
public int year { get; set; }
public int xp { get; set; }