`
cdragon
  • 浏览: 79133 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Language INtegrated Query,很强大!

阅读更多

LINQ,提供了对所有支持IEnumerable的对象(包括数据)进行查询的能力,很强很暴力哟~。这篇文章的内容,打个比方,有些类似于office excel中的表达式,只是类似。

 

lambda不仅能在委托中应用,而且可以用在表达式树中(基于System.Linq.Expressions名字空间的类型)。

 

下面的泛型委托使用了lambda,Func<int, int> func1 = n => n+1;--表示输入的类型是整型输出的类型是整型。

通过表达式树(expression trees),可以把委托用作为类型:Expression<Func<int, int>>  expr = n => n+1;表示Expression<Func<int, int>> 的实例是expr,这时系统会对lambda表达式自动作出处理。

 

以上意味着,表达式树具备动态委托的能力。(而C#正是经过这样地抽象封装,逐级逐步地实现着open-ended语言能力,并使原各部位更加强壮。)其实现如下。

 

using System;
using System.Linq;
using System.Linq.Expressions;

public class EntryPoint
{
    static void Main() {
    Expression<Func<int, int>> expr = n => n+1;
    Func<int, int> func = expr.Compile();//编译委托
    for( int i = 0; i < 10; ++i ) {
        Console.WriteLine( func(i) );
    }
  }
}

当把lambda表达式赋给Expression<T>的实例时,系统实际上充当表达式解析器(parser)的作用。

 

不使用lambda表达式也可以达到相同的目的,示例如下。

using System;
using System.Linq;
using System.Linq.Expressions;

public class EntryPoint
{
   static void Main() {
   var n = Expression.Parameter( typeof(int), "n" );//表示参数--整型变量n
   var expr = Expression<Func<int,int>>.Lambda<Func<int,int>>(
         Expression.Add(n, Expression.Constant(1)),n );//使用Expression泛型式的Lambda泛型方法增加n的第一个常量值
   Func<int, int> func = expr.Compile();
   for( int i = 0; i < 10; ++i ) {
       Console.WriteLine( func(i) );
    }
  }
}

 

 我们再来看一个对lambda表达式进行“替换-更新”的例子:

using System;
using System.Linq;
using System.Linq.Expressions;

public class EntryPoint
{
  static void Main() {
    Expression<Func<int,int>> expr = n => n+1;
    // 这里把原lambda表达式替换为2倍作为第2个常量
    expr = Expression<Func<int,int>>.Lambda<Func<int,int>>(
                       Expression.Multiply( expr.Body,Expression.Constant(2) ),
                       expr.Parameters );
    Func<int, int> func = expr.Compile();
    for( int i = 0; i < 10; ++i ) {
         Console.WriteLine( func(i) );
    }
  }
}

 

小结:表达式树能够对所有符合IEnumerable的类型进行描述,包括其它结构的存储形式,如XML、关系数据库。这也是C#能够实现LINQ-collection(Linq to sql、Linq to dataset、Linq to entities、Linq to xml、Linq to objects)的根本原因。

 

总结:表达式树是一种语言原生的,用来描述数据操作的非OO机制,提供了算法分离原型,是C#函数编程的基础。这在OO大行其道的情况下,这种相对非依附能力有其非常独到之处;这种本质上类似脚本的东东,使得我们在OO之上,开拓新的思路,与此相似的是Lisp语言。

 

另,在.NET体系中,我们可以清楚地看到,linq2sql被定位于表域(table domain space)!实际上,linq比想象得复杂。

分享到:
评论

相关推荐

    LINQ,语言级集成查询(Language INtegrated Query)

    LINQ,语言级集成查询(Language INtegrated Query)  经过了最近 20 年,面向对象编程技术( object-oriented (OO) programming technologies )在工业领域的应用已经进入了一个稳定的发展阶段。程序员现在都已经...

    LINQ是Language Integrated Query的简称

    LINQ,全称为Language Integrated Query,是.NET框架中的一项创新技术,它将查询操作内建到编程语言本身,使得在C#和Visual Basic等.NET语言中进行数据查询变得更为直观和强大。LINQ的设计目标是统一多种数据源的...

    Pro LINQ - Language Integrated Query in C# 2010 无水印pdf

    Pro LINQ - Language Integrated Query in C# 2010 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如...

    Pro LINQ Language Integrated Query in VB 2008

    LINQ,全称Language Integrated Query,是微软在.NET Framework 3.5中引入的一种编程模型,它提供了一种声明式的语法来处理数据集合,使得在各种数据源上执行查询操作变得更加简单、直观且一致。LINQ的核心价值在于...

    Pro LINQ: Language Integrated Query in C# 2010

    **Pro LINQ: Language Integrated Query in C# 2010** 是一本专为C#开发者编写的书籍,旨在帮助读者深入理解并掌握LINQ(Language Integrated Query)这一强大的查询技术。本书由Adam Freeman和Joseph C. Rattz, Jr....

    Pro LINQ Language Integrated Query in C# 2008

    《Pro LINQ: Language Integrated Query in C# 2008》是一本专注于介绍C# 2008中引入的重要特性——语言集成查询(Language Integrated Query,简称LINQ)的专业书籍。由Apress出版社出版,该书深入浅出地阐述了如何...

    Pro LINQ Language Integrated Query n C#2008

    《Pro LINQ Language Integrated Query in C# 2008》是一本专注于C#编程语言中的LINQ(Language Integrated Query)技术的专业书籍。LINQ是.NET Framework 3.5及更高版本引入的一项革命性功能,它允许开发人员使用...

    Pro LINQ Language Integrated Query in C# 2008(PDF+SourceCode)

    《Pro LINQ Language Integrated Query in C# 2008》是一本专为C#开发者设计的指南,详细讲解了Language Integrated Query(LINQ)这一强大的数据查询技术。LINQ是.NET Framework 3.5引入的一项创新特性,它极大地...

    Language-Integrated Query (LINQ) 电子书 (PDF).rar

    《Language-Integrated Query (LINQ).pdf》 《Language-Integrated Query (LINQ) 译文.pdf》 《LINQ to SQL 语法.pdf》中文 《Language-Integrated Query (LINQ).pdf》 《Pro LINQ - Language Integrated Query in ...

    Pro LINQ Language Integrated Query

    **LINQ(Language Integrated Query,语言集成查询)**是.NET框架中的一项重要技术,自.NET 3.5版本引入以来,极大地简化了对各种数据源的查询操作。它将查询语句内建到C#和VB.NET等编程语言中,为开发者提供了统一...

    pro linq language integrated query in c# 2010 英文pdf+源码

    综上所述,《Pro LINQ: Language Integrated Query in C# 2010》是一本全面而深入的教程,对于希望在C# 2010中掌握和运用LINQ技术的开发者来说,具有很高的参考价值。配合提供的源码,读者能够更直观地学习和实践书...

    Pro LINQ Language Integrated Query in C# 2010

    标题《Pro LINQ: Language Integrated Query in C# 2010》和描述表明这本书是关于C# 2010语言集成查询(LINQ)的权威指南。这是一本面向专业开发者的书籍,由Adam Freeman和Joseph C. Rattz, Jr.共同编写。本书不仅...

    Pro LINQ: Language Integrated Query in C# 2010 (含源码)

    Pro LINQ: Language Integrated Query in C# 2010 is all about code. Literally, this book starts with code and ends with code. Most books show the simplest examples of how to use a method, but they so ...

    高清彩版 pro-linq-language-integrated-query-in-c#

    本书《Pro LINQ: Language Integrated Query in C# 2010》是关于如何使用C#语言进行集成查询(LINQ)的权威指南。作者Adam Freeman和Joseph C. Rattz, Jr. 深入讲解了LINQ的原理和应用,书中内容丰富,包括了大量的...

    .NET Language-Integrated Query

    .NET Language-Integrated Query,简称LINQ(Language Integrated Query),是微软在.NET Framework 3.5版本中引入的一项重要技术,旨在提供一种更加直观、统一的方式来处理数据查询,无论是数据库、XML文档还是各种...

    Language Integrated Query学习指南

    LinQ学习指南  Linq目标是实现语言与数据的深度结合,Linq以统一的数据访问方式访问各种数据源,以相同的方式读取数据,象SQL语句一样进行查询,而这些都是整合在我们熟悉的编程语言如C#,VB当中,另外Linq是使用强...

Global site tag (gtag.js) - Google Analytics