151.C# LINQ概述 c# lingq

151.C# LINQ概述 c# lingq

编码文章call10242024-12-25 10:36:2727A+A-

摘要


语言集成查询 (LINQ) 为 C# 和 Visual Basic 提供语言级查询功能和高阶函数 API,让你能够编写具有很高表达力度的声明性代码。

正文


LINQ 的历史

从语言方面的进化
–委托
–匿名方法
–Lambda表达式
–Linq查询表达式

LINQ是什么

  • LINQ是语言级集成查询(Language INtegrated Query)
  • LINQ是一种用来进行数据访问的编程模型,使得.NET语言可以直接支持数据查询
  • LINQ的目标是降低访问数据的复杂度
  • LINQ可以用统一的方法访问不同类型的数据,可以将数据作为对象使用
  • 能够更好地与编程模型集成
  • 可以在Visual Studio中进行智能提示
  • 动态编程

LinQ目的

面向对象技术诞生以来并没有解决降低访问和整合信息数据的复杂度的问题。其中两个最主要访问的数据源与数据库和 XML 相关。

使用LINQ的目的是为了提供一个解决对象关系映射问题的方案,同时简化对象和数据源的交互。LINQ最终发展成为一个通用语言集成查询的工具包。

LINQ正如它的名字“集成查询语言”的含义一样,它提供给程序员一个统一的编程界面。程序员不需要关心他将要操作的将是关系数据库还是XML,甚至是远程的对象,它都采用同样的查询方式。就如同通过T-SQL操纵数据库一样,不管是Oracle,SyBase还是SQL Server,他们的Select语法都是一样的。

有了LINQ,程序员便可以不再沉泥于不同的数据访问技术的学习。不管编程语言如何发展,还是数据库技术的发展,都不再需要程序员进行学习,数据存储的效率由数据库厂商进行优化,灵活的数据操作方法由数据访问中间件厂商提供,程序员只需要编写业务逻辑。

LINQ包括

  • LINQ to Objects 用于对象的查询
  • LINQ to XML 对XML数据的查询
  • LINQ to ADO.NET 对数据库的查询
  • LINQ to DataSets 数据集
  • LINQ to Entities ORM对象
  • LINQ to SQL 简易ORM框架
  • 命名空间在System.Linq
  • 实现 IEnumerable<T> 或 IQueryable<T> 接口的对象都可使用LINQ操作

LINQ的进化路径

委托

public delegate void Cal(int x, int y);

private void Add(int x ,int y)
{
    MessageBox.Show((x + y).ToString());
}

private void btnCall_Click(object sender, EventArgs e)
{
    Cal cal = new Cal(Add);
    cal(2, 3);
}

匿名方法

public delegate void Cal(int x, int y);

private void btnCall_Click(object sender, EventArgs e)
{
    Cal cal = delegate (int x, int y)
    {
        MessageBox.Show((x * y).ToString());
    };

    cal(3, 4);
}

Lambda 表达式

Lambda 表达式是一个可用于创建委托或表达式树类型的匿名函数。 通过使用 lambda 表达式,可以写入可作为参数或返回为函数调用值的本地函数。 Lambda 表达式对于编写 LINQ 查询表达式特别有用。
若要创建 Lambda 表达式,必须在 Lambda 运算符 => 左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。 例如,lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方。

public delegate void Cal(int x, int y);

private void btnCall_Click(object sender, EventArgs e)
{
    Cal cal = (x, y) =>
    {
        MessageBox.Show((x * y).ToString());
    };
    cal(20, 3);
}
点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4