匿名、Lambda、Linq技术的学习

1.匿名类

var ObjFood = new
            {
                Name="外带全家桶",
                Creator="KFC",
                Cost=108.99
            };

       声明时必须初始化;不能用数组初始化;不能赋空

2.简单扩展方法

      针对某种数据类型,必须定义在静态类

 使用扩展方法

            string Str = "JMLJBYW";
            Console.WriteLine(Str + Str.Getlength());

    效果:

    使用扩展方法解决密封类的继承限制

        Ps.使用sealed关键字能密封属性(用于封装dll)

        public static string ShowName(this Food obj)
        {
            return "食物名称为:" + obj.Name;
        }
            Food obj = new Food("全家桶", 108.99);
            Console.WriteLine(obj.ShowName());

3.委托

        public delegate int Cal(int a, int b);//声明委托事件

        Cal obj = new Cal(Add);//创建委托对象

        obj -= Add;//断开连接
        obj += Sub;//添加链接

        Console.WriteLine(obj(2,1).ToString());//使用

    被委托的方法必须是静态方法

4.匿名方法和Lambda表达式

     匿名方法(接委托)

            Cal obj = delegate (int a, int b)
            {
                return a + b;
            };
            Console.WriteLine(obj(1, 2).ToString());

    Lambda表达式

            Cal obj = (int a, int b) => { return a + b; };
            Console.WriteLine(obj(1, 2));

      单参数缩写形式

        public delegate int Single(int a);

        Single ObjX = a => a * a;//单参数缩写
        Console.WriteLine(ObjX(1));

5.Linq技术

            var q = from item in obj
                    where item.Cost < 100//查找价格低于100的菜
                    orderby item.Cost
                    select item;

            var w = obj
                .Where(item => item.Cost < 100)
                .OrderByDescending(item => item.Cost)
                .Select(item=>item);

以上两种表达式等价使用“.linq语句”时需要在括号中使用lambda表达式

      分组技术

            var w = obj
                .Where(item => item.Cost < 200)
                .OrderByDescending(item => item.Cost)
                .GroupBy(item=>item.Name.Substring(0,3))
                .Select(item=>item);

            foreach (var item in w)
            {
                Console.WriteLine("分组条件:{0}",item.Key);
                Console.WriteLine("");
                foreach (var food in item)
                {
                    Console.WriteLine(food.Show());
                }
            }

      linq中的查询时机

          延迟执行:需要在查询结束之后遍历集合展示数据的方法(上面的方法都是)

          立即执行:使用“聚合扩展方法”  如list.Count();会立刻返回一个数据

      查询语句                                                                       查询方法

    高级linq语句

Count总数
Max/Min最大/最小值
Average平均数
Take取走指定数量的项
Skip跳过指定数量的项
TakeWhile满足条件返回序列
SkipWhile满足条件跳过序列

 

Range生成整数序列
Repeat生成重复序列

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值