LINQはよくわかりません。私が見つけたすべての例は、なぜLINQを使用するのかわからないほど単純化されているか、複雑すぎて、LINQがどのように機能するかを理解する必要があります。
ですから、これにLINQを使用するかどうか、またどのように使用するのか疑問に思います...この例では、プレーヤークラスのリストがあり、各クラス内に能力のリストがあるとします。各能力にはレベル要件があります。LINQを使用して、特定のクラスのセットに対して特定のレベル以下のすべての能力を選択するにはどうすればよいですか?
このデータを与える:
- クラス1
- 能力1-レベル1-
- 能力2-レベル5
- 能力3-レベル9
- クラス2
- 能力4-レベル1-
- 能力5-レベル2
- 能力6-レベル6
- クラス3
- 能力7-レベル2
- 能力8-レベル4
- 能力9-レベル6
レベル5以下のクラス1とクラス3のすべての能力のリストが欲しいです。結果は{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;
}
}