【C#学习7】LINQ

LINQ的使用

数据初始化和LINE基础使用

武林高手类

namespace _033_LINQ
{
    class MartialArtsMaster //武林高手类
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string MenPai { get; set; }
        public string Kungfu { get; set; }
        public int Level { get; set; }
    }
}

Main方法

class Program
{
    static void Main(string[] args)
    {
        var masterList = new List<MartialArtsMaster>()//初始化武林高手
        { 
            //创建新对象,在初始化的时候赋值,用","隔开
            new MartialArtsMaster(){Id=1,Name="黄蓉",Age=18,MenPai="丐帮",Kungfu="打狗棒法",Level=8} ,
            new MartialArtsMaster(){Id=2,Name="任我行",Age=50,MenPai="明教",Kungfu="葵花宝典",Level=9},
            new MartialArtsMaster(){Id=2,Name="令狐冲",Age=23,MenPai="华山",Kungfu="孤独九剑",Level=10}
        };

        //使用LINQ做查询(表达式写法)
        //from后面设置查询的集合
        var res1 = from m in masterList
                   //where后面跟上查询的条件,通过&&添加并列的条件
                   where m.Level > 8 &&m.MenPai=="明教"
                   //表示m的集合返回 (LINQ集合的返回值类型),m.Name就是返回string类型
                   select m;

        foreach (var temp in res1)
        {
            Console.WriteLine(temp.Name);
        }
        Console.ReadKey();
    }
}

LINQ的拓展方法

class Program
    {
        static void Main(string[] args)
        {
            //初始化武林高手.......
            
            //LINQ的拓展方法
            //遍历每一个元素,然后调用( )方法,根据条件进行过滤
            var res2 = masterList.Where(Test1);
            //使用Lamda表达式进行输写
            var res3 = masterList.Where(m => m.Age < 25 &&m.MenPai=="华山"); 

            foreach (var temp in res2)
            {
                Console.WriteLine(temp.Name);
            }
            Console.ReadKey();
        }

        //过滤方法
        static bool Test1(MartialArtsMaster master)
        {
            if (master.Age < 25) return true;
            return false;
        }
    }

LINQ联合查询

添加Kungfu类

class Kungfu
    {
        public int KungfuId { get; set; }
        public string KungfuName { get; set; }
        public int KungfuPower { get; set; }
    }

Main方法

class Program
    {
        static void Main(string[] args)
        {
            //初始化武林高手....
            
            //初始化功夫
            var kungfuList = new List<Kungfu>
            {
                new Kungfu(){ KungfuId=1,KungfuName="打狗棒法",KungfuPower=100},
                new Kungfu(){ KungfuId=2,KungfuName="葵花宝典",KungfuPower=90},
                new Kungfu(){ KungfuId=3,KungfuName="孤独九剑",KungfuPower=80}
            };

            //LINQ联合查询
            //每一条m对应着k里所有的集合,也就是m*k个数据
            var res4 = from m in masterList
                       from k in kungfuList
                       //根据条件,筛选两个集合相匹配的对象出来
                       where m.Kungfu == k.KungfuName && k.KungfuPower > 80
                       select new { master = m, kungfu = k }; //创建临时对象
                       
            //拓展方法-使用委托进行联合查询
            //m=>kungfuList表示两个List进行联合,(m,k)组拼结果,之后创建一个新的集合
            //var res5 = masterList.SelectMany(m => kungfuList, (m, k) => new { master = m, kungfu = k });
            var res5 = masterList.SelectMany(m => kungfuList, (m, k) => new { master = m, kungfu = k })
               //添加条件
               .Where(x => x.master.Kungfu == x.kungfu.KungfuName && x.kungfu.KungfuPower > 80);

            foreach (var temp in res4)
            {
                Console.WriteLine(temp.master.Name);
            }
            Console.ReadKey();
        }
    }

LINQ排序

class Program
    {
        static void Main(string[] args)
        {
            //初始化武林高手....
            
           //对查询结果进行排序
            var res6 = from m in masterList
                 where m.Level > 7
                 //根据条件从小到大排序,用“,”进行多个条件排序(第一个条件相同的情况下)
                 orderby m.Age,m.Level
                 //orderby m.Age descending  //倒序
                 select m;

            //拓展方法 ThenBy (在第一个条件下再进行排序)
            //m=>排序条件
            var res7 = masterList.Where(m => m.Level >8)
            .OrderBy(m => m.Age).ThenBy(m => m.Id);
        }
    }

join on集合联合

{
......
	//on后面跟连接条件,equals表示两个字段相等
	var res8 = from m in masterList
	 	join k in kungfuList on m.Kungfu equals k.KungfuName
	   	select new { master = m, kungfu = k };
}

分组查询

{
	//into groups(按照相同的类型进行分组)
	var res9 = from k in kungfuList
		join m in masterList on k.KungfuName equals m.Name
		into groups 
		orderby groups.Count() //按照组内数量进行排序
		select new { kungfu = k, count = groups.Count() };

	//按照自身字段分组group
	//by+分组条件 ,into+组(放到哪个组里)
    var res10 = from m in masterList
		group m by m.MenPai into g
		//g.Key获取分组的条件
		select new { count = g.Count(), key = g.Key};
}

量词操作符Any All

{
	//量词操作符 any all判断集合中是否满足某个条件
	//any只要有一个对象满足条件就返回true,all得全部满足
	var res11 = masterList.Any(m => m.MenPai == "丐帮");
	var res12 = masterList.All(m => m.MenPai == "丐帮");
	Console.WriteLine(res11);
	Console.WriteLine(res12);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值