博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINQ学习(扩展方法,委托,Lambda表达式) 第一篇
阅读量:7086 次
发布时间:2019-06-28

本文共 2745 字,大约阅读时间需要 9 分钟。

前言:从今天开始我将我将学习LINQ的一些知识点,所以我将我整理的笔记发布,以供和我一样在学习LINQ的人能够参考。我们的目的就是学好LINQ的基础,然后再基础上面我们能够更进一步的学习到LINQ的精华。

  1. LINQ是什么?

(1) LINQ(Language Integrated Query)即语言集成查询。

(2) LINQ主要包含以下三个部分

  1) LINQ to Objects主要负责对象的查询

  2) LINQ to XML 主要负责XML的查询

  3) LINQ to ADO.NET 主要负责数据库的查询

u       LINQ to SQL

u       LINQ to DataSet

u       LINQ to Entrties

  1. LINQ的历史

(1) 最初由Anders hejlsberg构思,最初的研究计划称为“C w”。

(2)2007年11月19日,LINQ作为.NET FrameWork3.5的一部分正式发布。

  1. LINQ要解决的问题

注解:面向对象与数据访问两个领域长期分裂,各自为政。

(1) 编程语言中的数据类型与数据库中的数据类型形成两套体系。

(2) SQL编码体验落后

(3) SQL和XML都有各自的查询语言,而对象没有自己的查询语言。

例如:我们用LINQ实现查询数组中大于50的数字的代码是:

int[] arr = { 12, 33, 343, 456, 455, 6, 565, 565, 54 };

      IEnumerable ie = arr.Select(p => p).Where(p => p > 50);     

      IEnumerator result = ie.GetEnumerator();

      while (result.MoveNext())

      {

                      MessageBox.Show(result.Current);

      }

  1. LINQ的组成

 

  1. 扩展方法

(1) 目的:对已存在的类型的行为进行扩展。

(2) 目标:对现有的类提供额外的方法以增强该类的功能。

(3) public static class ClasssA

       {
                   public static string ExtraMehtod(this string s){   ………….   }     //this后面

    }                           带类型,表明为该类型添加扩展方法:ExtraMehtod

(4) 注意事项:

  1) 扩展方法是一种特殊的静态方法

  2) 扩展方法必须在静态类中定义

  3) 扩展方法的优先级低于同名的类方法

  4) 扩展方法只在特定的命名空间内有效

  5) 除非必须不要乱用扩展方法

  6) LINQ中的方法绝大部分都是扩展方法

例如:建立一个WinForm程序如下图所示,用来演示所实现的一个转换字母大小写的扩展方法。:

 

在扩展方法这个事件下面的代码实现过程是:

(1)    先创建一个静态类,在创建了一个静态方法,并且这个静态方法实现了方法的重载,代码如下:

public static class ExtraClass

    {

        public static string ToPascal(this string s)

        {

            return s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower();

        }

        public static string ToPascal(this string s, int len)

        {

            return s.Substring(0, 1).ToUpper() + s.Substring(len, 1).ToLower() + s.Substring(len+1);

        }

    }

(2)    双击扩展方法按钮触发的事件里面的代码为

private void btnExtraMethod_Click(object sender, EventArgs e)

        {

            string s = "abcdefg";

            MessageBox.Show(s.ToPascal());

        }

此程序的执行结果为:Abcdefg。

  1. Lambda表达式语法

(1) Lambda表达式是由.net framework l.0中有一个委托,在.net framework 2.0中有一个匿名方法过度而来。

(2) 最基本的Lambda表达式语法如下:   (参数列表)=>{方法体}

 说明:1) 参数列表中的参数类型可以是明确类型或者是推断类型

 2) 如果是推断类型,则参数的数据类型将由编译器根据上下文自动推断出来。

注:Lambda表达式与匿名方法相似,但不同,匿名方法中的参数必须是已定义的,而Lambda表达式可以是推断的。

例如:用Lambda表达式所实现上面那个列子的功能。如图:

 

(1)    先定义一个委托,如下所示:

public delegate string deleTransfer(string s);    //注意方法签名

(2)    在定义一个方法实现转换的功能,代码如下:

public string ToPascal(string s)

       {

           return s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower();

       }

(3)    然后再单击Lambda控件事件下面的代码是:

private void btnLambda_Click(object sender, EventArgs e)

        {

            //.net framework 1.0委托-函数指针实现

            //deleTransfer trans = new deleTransfer(ToPascal);

            //MessageBox.Show(trans("abcdefg"));

            //.net framework 2.0匿名方法实现

            //deleTransfer trans = delegate(string s)

            //{

            //    return s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower();

            //};

            //MessageBox.Show(trans("abcdefg"));

            //Lambda表达式实现

            deleTransfer trans = s => s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower();

            MessageBox.Show(trans("abcdefg"));

        }

     执行结果是:Abcdefg

上面我们已经完成了扩展方法,委托,LINQ的历史,Lambda表达式的基本知识都以介绍完毕,下面的博客我们将开始介绍LINQ的真正的操作数据的写法。

转载地址:http://epgml.baihongyu.com/

你可能感兴趣的文章
初识认知心理学
查看>>
通信相关
查看>>
hexo搭建github博客详解
查看>>
java 8 stream API<一>
查看>>
使用Blynk打造一款物联网产品
查看>>
iOS__在swift中实现debug隐藏打印日志
查看>>
论如何巧用链式语法逃出产品和后台魔爪
查看>>
Windows之MySQL安装教程
查看>>
GMQ稳定币助力完善数字货币体系
查看>>
Android 高仿腾讯新闻视频切换效果
查看>>
12月7日云栖精选夜读:特鲁多对话马云:请为加拿大小企业多花一些时间!
查看>>
计算机科学专业人工智能方向解析
查看>>
只有程序员才能看懂的15个瞬间
查看>>
好程序员大数据干货 SQL优化方案精解十则
查看>>
小程序安全设置-弹出框输入获取值
查看>>
Electron开发初体验
查看>>
android - 搜索功能
查看>>
JavaScript30 中文指南 - 13 图片随屏幕滚动而滑入滑出的效果指南
查看>>
Git基本操作
查看>>
Spring事务传播行为详解
查看>>