偶然学习到的,拿出来和大家分享下!
首先定义两个类,Player和Skill
/// <summary>
/// 玩家
/// </summary>
public class Player
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Skill { get; set; }
public int Level { get; set; }
public override string ToString()
{
return string.Format("Id:{0},Name:{1},Age:{2},Skill:{3},Level:{4}",Id,Name,Age,Skill,Level);
}
}
/// <summary>
/// 技能
/// </summary>
public class Skill
{
public int Id { get; set; }
public string Name { get; set; }
public int Power { get; set; }
public override string ToString()
{
return string.Format("Id:{0},Name:{1},Power:{2}",Id,Name,Power);
}
}
在Unity中创建一个Test测试脚本
声明Player的集合userList,和Skill的集合skillList,并在Start中进行初始化:
List<Player> userList;
List<Skill> skillList;
private void Start()
{
userList = new List<Player>()
{
new Player() { Id=1,Name="谢静璇",Age=28,Skill="镜花水月",Level= 8 },
new Player() { Id=2,Name="秦烈",Age=30,Skill="炎阳焚天",Level=10 },
new Player() { Id=3,Name="宋婷玉",Age=26,Skill="醉生梦死",Level=9 },
new Player() { Id=4,Name="令狐冲",Age=31,Skill="独孤九剑",Level=6 },
new Player() { Id=5,Name="郭靖",Age=28,Skill="九阴真经",Level=11 },
new Player() { Id=6,Name="东方不败",Age=26,Skill="葵花宝典",Level=12 },
new Player() { Id=7,Name="萧峰",Age=28,Skill="降龙十八掌",Level=12 },
new Player() { Id=8,Name="任我行",Age=35,Skill="吸星大法",Level=10 },
new Player() { Id=9,Name="段誉",Age=27,Skill="六脉神剑",Level=9 },
new Player() { Id=10,Name="张三丰",Age=100,Skill="太极",Level=100 },
};
skillList = new List<Skill>()
{
new Skill() { Id=1,Name="镜花水月",Power=90 },
new Skill() { Id=2,Name="炎阳焚天",Power=100 },
new Skill() { Id=3,Name="醉生梦死",Power=98 },
new Skill() { Id=4,Name="独孤九剑",Power=120 },
new Skill() { Id=5,Name="九阴真经",Power=110 },
new Skill() { Id=6,Name="葵花宝典",Power=150 },
new Skill() { Id=7,Name="降龙十八掌",Power=130 },
new Skill() { Id=8,Name="吸星大法",Power=100 },
new Skill() { Id=9,Name="六脉神剑",Power=80 },
new Skill() { Id=10,Name="太极",Power=150 }
};
}
在userList中查询等级(Level)大于10的玩家,并打印出来:
方法一:
List<Player> tempList = new List<Player>();
for (int i = 0; i < userList.Count; i++)
{
if (userList[i].Level > 10)
tempList.Add(userList[i]);
}
foreach (var item in tempList)
{
Debug.Log(item);
}
方法二(使用LINQ查询):
var tempList = from p in userList
where p.Level > 10
select p;
foreach (var item in tempList)
{
Debug.Log(item);
}
方法三(使用LINQ查询,过滤法):
var tempList = userList.Where(WhereTest);
foreach (var item in tempList)
{
Debug.Log(item);
}
// 过滤方法
bool WhereTest(Player _player)
{
if (_player.Level > 10)
return true;
return false;
}
方法四:
var tempList = userList.Where(p=>p.Level > 10);
foreach (var item in tempList)
{
Debug.Log(item);
}
如果是多条件查询,userList.Where(p=>p.Level > 10 && Age > 30) ,用&&符继续添加筛选条件。
联合查询,查询技能伤害Power大于100的玩家信息:
方法一:
List<Player> tempList = new List<Player>();
for (int i = 0; i < userList.Count; i++)
{
for (int j = 0; j < skillList.Count; j++)
{
if (userList[i].Skill == skillList[j].Name)
{
if (skillList[j].Power > 100)
tempList.Add(userList[i]);
}
}
}
foreach (var item in tempList)
{
Debug.Log(item);
}
方法二(LINQ联合查询):
var tempList = from p in userList
from k in skillList
where p.Skill == k.Name && k.Power > 100
select p;
foreach (var item in tempList)
{
Debug.Log(item);
}
方法三:
var tempList = userList.SelectMany(p=>skillList,(p,k)=>new { player = p,skill = k}).Where(x=>x.player.Skill == x.skill.Name && x.skill.Power > 100);
foreach (var item in tempList)
{
Debug.Log(item);
}