I don’t really understand LINQ. I every example I find is overly simplified to the point where I don’t know why you would even use LINQ for it, or too complicated that I need to already know how LINQ works in order to understand it.
So I’m wondering if and how you would use LINQ to this… In this example let’s say you have a list of player classes, and inside of each class there is a list of abilities. Each ability has a level requirement. How can you use LINQ to select all abilities that are at or below a certain level for a set of specific classes?
Giveen this data:
- Class1
- Ability1 – Level 1
- Ability2 – Level 5
- Ability3 – Level 9
- Class2
- Ability4 – Level 1
- Ability5 – Level 2
- Ability6 – Level 6
- Class3
- Ability7 – Level 2
- Ability8 – Level 4
- Ability9 – Level 6
I want a list of all abilities for Class1 & Class3 that are level 5 or below. The result should be { Ability1, Ability2, Ability7, Ability8 }.
public class Class1
{
public class Ability
{
public string Name { get; set; }
public int Level { get; set; }
}
public class PlayerClass
{
public string Name { get; set; }
public List<Ability> Abilities { get; set; }
}
public List<PlayerClass> Classes { get; set; }
public Class1()
{
PlayerClass oClass;
Classes = new List<PlayerClass>();
oClass = new PlayerClass();
oClass.Name = "Class1";
oClass.Abilities = new List<Ability>();
oClass.Abilities.Add(new Ability() { Name = "Ability1", Level = 1 });
oClass.Abilities.Add(new Ability() { Name = "Ability2", Level = 5 });
oClass.Abilities.Add(new Ability() { Name = "Ability3", Level = 9 });
Classes.Add(oClass);
oClass = new PlayerClass();
oClass.Name = "Class2";
oClass.Abilities = new List<Ability>();
oClass.Abilities.Add(new Ability() { Name = "Ability4", Level = 1 });
oClass.Abilities.Add(new Ability() { Name = "Ability5", Level = 2 });
oClass.Abilities.Add(new Ability() { Name = "Ability6", Level = 6 });
Classes.Add(oClass);
oClass = new PlayerClass();
oClass.Name = "Class3";
oClass.Abilities = new List<Ability>();
oClass.Abilities.Add(new Ability() { Name = "Ability7", Level = 2 });
oClass.Abilities.Add(new Ability() { Name = "Ability8", Level = 4 });
oClass.Abilities.Add(new Ability() { Name = "Ability9", Level = 6 });
Classes.Add(oClass);
IEnumerable<Ability> Abilities =
GetAbilitiesForClasses("Class1;Class3".Split(';'), 5);
//Abilities should contain Ability1, Ability2, Ability7, Ability8
}
public IEnumerable<Ability> GetAbilitiesForClasses
(string[] asClassNames, int iLevel)
{
// TODO: Use LINQ to return the abilities for the class names
//contained in asClassNames that are at or below level: iLevel
return null;
}
}
1 Answer