LINQ查询

偶然学习到的,拿出来和大家分享下!
首先定义两个类,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);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值