学习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);

 

目录 1 LINQ查询结果集 1 2 System.Array 数组 1 2.1 基于System.Array定义数组 1 2.2 基于类型定义数组 1 2.3 数组元素的清空 1 2.4 System.Array类静态成员 1 2.5 不用循环填充数组 1 2.6 数组类实例成员 2 3 System.Collections 集合 2 3.1 ArrayList 2 3.1.1 实例成员 2 3.1.2 静态成员 2 3.2 List<T> 3 3.3 Hashtable 6 3.4 SortedList 6 3.5 SortedList<TKey,TValue> 7 3.6 Queue<T> 8 3.7 Stack<T> 8 3.8 LinkedList<T> 8 3.9 HashSet<T> 9 4 System.Linq 10 4.1 System.Linq.Enumerable 10 4.2 System.Linq.Queryable 10 4.3 System.Linq.Lookup <TKey,TElement> 10 4.4 System.Linq.Expressions.Expression 10 5 接口 10 5.1 IEnumerable 、IEnumerator 10 5.1.1 正常使用 10 5.1.2 C#的 yield 12 5.2 IEnumerable <T> 12 5.3 IEnumerator <T> 12 5.4 ICollection 12 5.5 ICollection <T> 13 5.6 IList 13 5.7 IList <T> 13 5.8 IEqualityComparer 13 5.9 IEqualityComparer <T> 13 5.10 IDictionary 13 5.11 IDictionary <TKey,TValue> 13 5.12 IDictionaryEnumerator 13 5.13 IComparer 13 5.13.1 接口方法说明 int Compare(object x, object y) 13 5.13.2 ArrayList.Sort (IComparer) 方法 13 5.14 IComparer <T> 14 5.14.1 接口方法override int Compare(T x, T y)说明 14 5.14.2 List.Sort (IComparer) 方法 14 5.15 System.Linq.IGrouping<T> 14 5.16 System.Linq.ILookup<TKey,TElement> 14 5.17 System.Linq.IOrderedEnumerable<T> 14 5.18 System.Linq.IOrderedQueryable 14 5.19 System.Linq.IOrderedQueryable<T> 15 5.20 System.Linq.IQueryable 15 5.21 System.Linq.IQueryable<T> 15 5.22 System.Linq.IQueryProvider 15 6 集合扩展方法 15 6.1 集合扩展方法的实现:一个Where的例子 15 6.2 延迟类 15 6.2.1 Select 选择 16 6.2.2 SelectMany 选择 16 6.2.3 Where 条件 16 6.2.4 OrderBy 排序升 17 6.2.5 OrderByDescending 排序降 17 6.2.6 GroupBy 分组 17 6.2.7 Join 联合查询 18 6.2.8 GroupJoin 18 6.2.9 Take 获取集合的前n个元素 19 6.2.10 Skip 跳过集合的前n个元素 19 6.2.11 Distinct 过滤集合中的相同项 19 6.2.12 Union 连接不同集合,自动过滤相同项 19 6.2.13 Concat 连接不同集合,不会自动过滤相同项 19 6.2.14 Intersect 获取不同集合的相同项(交集) 20 6.2.15 Except 从某集合中删除其与另一个集合中相同的项 20 6.2.16 Reverse 反转集合 20 6.2.17 TakeWhile 条件第一次不成立就跳出循环 20 6.2.18 SkipWhile 条件第一次不成立就失效,将后面的数据全取 20 6.2.19 Cast 将集合转换为强类型集合 21 6.2.20 OfType 过滤集合中的指定类型 21 6.3 不延迟(浅复本) 21 6.3.1 Single 集合中符合条件的唯一元素,浅复本 21 6.3.2 SingleOrDefault 集合中符合条件的唯一元素(没有则返回类型默认值),浅复本 21 6.3.3 First 集合的第一个元素,浅复本 21 6.3.4 FirstOrDefault 集合中的第一个元素(没有则返回类型默认值),浅复本 22 6.3.5 Last 集合中的最后一个元素,浅复本 22 6.3.6 LastOrDefault 集合中的最后一个元素(没有则返回类型默认值),浅复本 22 6.3.7 ElementAt 集合中指定索引的元素,浅复本 22 6.3.8 ElementAtOrDefault 集合中指定索引的元素(没有则返回类型默认值),浅复本 22 6.3.9 Contains 判断集合中是否包含有某一元素 22 6.3.10 Any 判断集合中是否有元素满足某一条件 22 6.3.11 All 判断集合中是否所有元素都满足某一条件 23 6.3.12 SequenceEqual 判断两个集合内容是否相同 23 6.3.13 Count 、LongCount集合中的元素个数 23 6.3.14 Average 、Sum集合平均值求和 23 6.3.15 Max、Min 集合最大值,最小值 24 6.3.16 Aggregate 根据输入的表达式获取一个聚合值 24 6.3.17 DefaultIfEmpty 查询结果为空则返回默认值,浅复本 24 6.3.18 ToArray 将集合转换为数组,浅复本 24 6.3.19 ToList 将集合转换为List<T>集合,浅复本 25 6.3.20 ToDictionary 将集合转换为<K, V>集合,浅复本 25 7 Lambda表达式 25 7.1 例1(比效) 25 7.2 例2(多参) 27 7.3 例3(list.Where) 27 7.4 Lambda表达式中Lifting 28 8 QuerySyntax 查询语法 29 8.1 from in select 30 8.2 orderby 排序 30 8.3 group by into 分组 31 8.4 join in on equals 联合查询 33 8.5 into 汇总 33 9 DataSource 数据绑定 34
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值