C# LINQ

LINQ概述:

    LINQ引入了标准的、易于学习的、查询和更新数据模式,可以对其技术进行扩展以支持几乎任何类型的数据储存。

var:

    在LINQ查询表达式中,使用匿名类型初始化变量时就会用到它,由于只有编译器知道匿名类型的名称,因此必须在源代码中使用var。如果已经使用了var初始化查询变量,则还必须使用var作为查询变量进行循环访问的foreach语句中迭代变量的类型。

Lambda表达式:

    Lambda表达式是一个匿名函数,包含表达式和语句,可用于创建委托或表达式目录树类型。所有Lambda表达式都使用Lambda运算符“=>”,(读为goes to)。Lambda运算符的左边是输入参数(如男有),右边包含表达式或语句块。例如,Lambda表达式x=x*x读作xgoes to x times x。

Lambda表达式的基本形式如下:

(input parameters) => expression

其中,input parameters表示输入参数,expression表示表达式。

LINQ查询表达式:

LINQ查询表达式子句及说明
子  句说    明
from指定数据源和范围变量
select指定执行查询时返回的序列中的元素将具有的类型和形式
group按照指定的键值对查询结果进行分组
where根据一个或多个由逻辑“与”和逻辑“或”运算符(&&或||)分隔的布尔表达式筛选元素。
orderby基于元素类型的默认比较器按升序或降序对查询结果进行排序
join基于两个指定匹配条件之间的相等比较来连接两个数据源
let引入一个用于储存查询表达式中子表达式结果的范围变量
into提供一个标识符,它可以充当对join、group或select子句的结果的引用

代码实现:

    先定义一个功夫类和武林高手类,在主函数使用LINQ查询

internal class KongFu
    {
        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);
        }
    }
internal 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, MenPai, KongFu, Level);
        }
    }
internal class Program
    {
        static void Main(string[] args)
        {
            //var masterList = new List<MartialArtsMaster>()
            //{
            //    new MartialArtsMaster(){Id = 100,Age = 22,KongFu = "寒冰掌"}
            //};
            //初始化武林高手

            var aList = new List<int>(){1,2,3};
            int a = aList.Count();
            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(){Id=1, Name="打狗棒法", Power=90},
                new KongFu(){Id=2, Name="降龙十八掌", Power=95},
                new KongFu(){Id=3, Name="葵花宝典", Power=100},
                new KongFu(){ Id=  4, Name = "独孤九剑", Power = 100 },
                new KongFu(){ Id = 5, Name = "九阴真经", Power = 100 },
                new KongFu(){ Id = 6, Name = "弹指神通", Power = 100 }
            };
            //linq语句查询
            //var res = from m in masterList//from后设置查询对象
            //          where m.Level>8//where后跟查询条件
            //          select m;//返回结果

            //扩展语法
            //var res = masterList.Where(Test);

            //linq联合查询
            //var res = from m in masterList
            //          from k in kongFuList
            //          where m.KongFu == k.Name
            //          select new { master = m, kongFu = k };

            var res = masterList.SelectMany(m => kongFuList, (m, k) => new { master = m, kongFu = k })
                .Where(x => x.master.KongFu == x.kongFu.Name&&x.kongFu.Power>90);
            //var res = masterList.Where(master=> master.Level > 8 && master.MenPai == "丐帮");
            int b = res.Count();
            Console.WriteLine(a);
            Console.WriteLine(b); 
            foreach (var m in res)
            {
                Console.WriteLine(m);
            }
            //Console.WriteLine(res.Getlength(0));
        }
        static bool Test(MartialArtsMaster master)
        {
            if(master.Level>8&&master.MenPai=="丐帮") 
            { 
                return  true; 
            }
            else 
            { 
                return false; 
            }
        }
    }

结果:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值