学习C#高级编程之LINQ学习

MartialArtsMaster.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _018_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 Kongfu { get; set; }
        public int Level { get; set; }

        public override string ToString()
        {
            return string.Format("Id:{0},Name:{1},Age:{2},Menpai:{3},Kongfu:{4},Level:{5}", Id, Name, Age, Kongfu, Level);
        }
    }
}

Kongfu.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _018_LINQ
{
    class Kongfu
    {
        public int KongfuId { get; set; }
        public string KongfuName { get; set; }
        public int Lethality { get; set; }

    }
}

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _018_LINQ
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化武林高手
            var masterList = new List<MartialArtsMaster>(){
            new MartialArtsMaster(){ Id = 1, Name = "黄蓉",    Age = 18, Menpai = "丐帮", Kongfu = "打狗棒法",  Level = 9  },
            new MartialArtsMaster(){ Id = 2, Name = "洪七公",  Age = 70, Menpai = "丐帮", Kongfu = "打狗棒法",  Level = 10 },
            new MartialArtsMaster(){ Id = 3, Name = "郭靖",    Age = 22, Menpai = "丐帮", Kongfu = "降龙十八掌",Level = 10 },
            new MartialArtsMaster(){ Id = 4, Name = "任我行",  Age = 50, Menpai = "明教", Kongfu = "葵花宝典",  Level = 1  },
            new MartialArtsMaster(){ Id = 5, Name = "东方不败",Age = 35, Menpai = "明教", Kongfu = "葵花宝典",  Level = 10 },
            new MartialArtsMaster(){ Id = 6, Name = "林平之",  Age = 23, Menpai = "华山", Kongfu = "葵花宝典",  Level = 7  },
            new MartialArtsMaster(){ Id = 7, Name = "岳不群",  Age = 50, Menpai = "华山", Kongfu = "葵花宝典",  Level = 8  },
            new MartialArtsMaster(){ Id = 8, Name = "令狐冲", Age = 23, Menpai = "华山", Kongfu = "独孤九剑", Level = 10 },
            new MartialArtsMaster(){ Id = 9, Name = "梅超风", Age = 23, Menpai = "桃花岛", Kongfu = "九阴真经", Level = 8 },
            new MartialArtsMaster(){ Id =10, Name = "黄药师", Age = 23, Menpai = "梅花岛", Kongfu = "弹指神通", Level = 10 },
            new MartialArtsMaster(){ Id = 11, Name = "风清扬", Age = 23, Menpai = "华山", Kongfu = "独孤九剑", Level = 10 }
            };
            //初始化武学
            var kongfuList = new List<Kongfu>(){
            new Kongfu(){KongfuId=1, KongfuName="打狗棒法", Lethality=90},
            new Kongfu(){KongfuId=2, KongfuName="降龙十八掌", Lethality=95},
            new Kongfu(){KongfuId=3, KongfuName="葵花宝典", Lethality=100},
            new Kongfu(){ KongfuId=  4, KongfuName = "独孤九剑", Lethality = 100 },
            new Kongfu(){ KongfuId = 5, KongfuName = "九阴真经", Lethality = 100 },
            new Kongfu(){ KongfuId = 6, KongfuName = "弹指神通", Lethality = 100 }
            };
            //查询所有武学级别大于8的武林高手
            //var res = new List<MartialArtsMaster>();
            //foreach(var temp in masterList)
            //{
            //    if (temp.Level > 8)
            //    {
            //        res.Add(temp);
            //    }
            //}
            //使用LINQ做查询
            var res = from m in masterList//from后面设置查询的集合
                      where m.Level > 8    //where后面跟上查询的条件
                      select m.Name;           //表示m的结果结合返回
            foreach(var temp in res)
            {
                Console.WriteLine(temp);
            }
            Console.ReadKey();
        }
    }
}

LINQ语句还有扩展写法:

 var res = masterList.Where(m=>m.Level>8 && m.Menpai == "丐帮");

联合查询:通过两个表的共有属性进行查询

 //3.LINQ联合查询
            var res = from m in masterList
                      from k in kongfuList
                      where m.Kongfu == k.KongfuName && k.Lethality > 90
                      //select new { master = m, kongfu = k };
                      select m;//取得所学功夫大于90的武林高手

这个也能使用扩展语句:

var res = masterList.SelectMany(m => kongfuList, (m, k) => new { master = m, kongfu = k })
                .Where(x=>x.master.Kongfu == x.kongfu.KongfuName && x.kongfu.Lethality>90);

排序:

//var res = from m in masterList//from后面设置查询的集合
            //          where m.Level > 8 && m.Menpai == "丐帮"   //where后面跟上查询的条件
            //          //orderby m.Age descending //按照年龄降序排序
            //          orderby m.Level,m.Age //按照多个字段进行排序,如果字段的属性相同,就按照第二个属性排序
            //          select m;           //表示m的结果结合返回

            //var res = masterList.Where(m => m.Level > 8 && m.Menpai == "丐帮").OrderBy(m => m.Age);
            //var res = masterList.Where(m => m.Level > 8 && m.Menpai == "丐帮").OrderBy(m => m.Level).ThenBy(m=>m.Age);

join on联合查询

//5.join on 集合联合
            var res = from m in masterList
                      join k in kongfuList on m.Kongfu equals k.KongfuName
                      where k.Lethality > 90
                      select new { master = m, kongfu = k};

分组查询的方法

//6.分组查询 into groups(把武林高手按照所学功夫分类,看一哪个功夫修炼的人最多)
            //var res = from k in kongfuList
            //          join m in masterList on k.KongfuName equals m.Kongfu
            //          into groups
            //          orderby groups.Count()
            //          select new { kongfu = k, count = groups.Count() };

            //7.按照自身字段分组 group
            var res = from m in masterList
                      group m by m.Menpai into g
                      select new { count = g.Count(), key = g.Key };//g.Key Key表示是按照哪个属性分的组

量词操作符

//8.量词操作符,any all判断集合中是否满足某个条件
            //bool res = masterList.Any(m => m.Menpai == "丐帮");  //一个满足即可
            //Console.WriteLine(res);

            bool res = masterList.All(m => m.Menpai == "丐帮");//判断所有是否满足
            Console.WriteLine(res);

猜你喜欢

转载自blog.csdn.net/kouzhuanjing1849/article/details/81072658
今日推荐