一步一步学Linq to sql(一):预备知识

一:什么是Linq to sql

  Linq to sql(或叫DLINQ)是LINQ(.NET语言集成查询)的一部分,全称基于关系数据的.NET语言集成查询,用于以对象形式管理关系数据,并提供了丰富的查询功能,它和Linq to xml,Linq to objects,Liniq to dataset,Linq to entities等组成了强大的LINQ.

  要学好LINQ查询语法,就不得不限理解C#3.0的一些新特性,下面一一简单介绍.

 

二.隐含类型局部变量

var-(1)编译器推断它的类型(CLR不知道你是否使用了var)

  (2)声明的时候赋值,而且不能使null值

  (3)只能用于局部变量,用于字段是不可以的

(4)eg: View Code

 

 

三.匿名类型

var-(1)允许开发人员自定义行内类型,无需显示定义类型

  (2)var用于声明匿名类型

  (3)可以很方便的实现对象的转换和投影

  (4)eg:var date=呢我{username="zhuye",age=26};

      Console.WriteLine("username:{0}age:{1}",date.username,data.age);

 

四.扩展方法

  (1)为了对CLR类型进行操作,只能创建一些helper方法,或者生产子类,扩展方法可以解决这些问题,同事也是实现LINQ的基础.

  (2)只能在静态类中定义并且是静态方法

  (3)如果扩展方法名和原有方法名发生冲突,那么扩展方法将失效

public static class helper

{

  public static string MD5Hash(this.string s)

  {

    return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s,"MD5")

  }

   public static bool In(this object o,IEnumerable b)

   {

     foreach(object obj in b)

     {

       if(obj==o)

        return true;

      }

      return false

   }

}

//调用扩展方法

Console.WriteLine("123456",MD5Hash());

Console.WriteLine("1",In(new[]{"1","2","3"}));

 

五.自动属性

  (1)意义不大,解决机械劳动,编译器自动为你生成get,set操作以及字段,并且你不能使用字段也不能自定义get,set操作,不过你可以分别定义get,set的访问级别.

  (2)eg:

      

 

六.对象初始化器

  (1)编译器会自动为你做setter操作,是的原本几行的属性赋值操作能在一行中完成,

  (2)允许只给一部分属性赋值,包括internal访问级别

  (3)可以结合构造函数一起使用,并且构造函数初始化优先于对象初始化器执行

  (4)eg:

      

 

七.集合初始化器

  (1)编译器会自动为你做集合插入操作.如果你为Hashtable初始化的话就相当于使用了两个对象初始化器

  (2)eg:

      

 

八.Lambda表达式

  (1)和2.0的匿名方法差不多,都是用于产生内联方法,只不过Lambda表达式的语法更为简洁.

  (2)语法如下:(参数列表)=>表达式或者语句块

      其中:

      参数个数:可以有多个参数,一个参数,或者无参数

      表达式或者语句块:这部分就是我们平常写函数的实现部分(函数体).

      前面的示例分别是1个参数的例子,下面集合扩展方法来一个复杂的例子:

  (3)eg1:一个参数的例子

      

      eg2:多个参数的例子

      

 

九.查询句法

  (1)查询句法是使用标准的LINQ查询运算符来表达查询时一个简便的声明式简化写法

  (2)该句法能在代码里表达查询时增进可读性和间接性

  (3)VS对查询句法提供了完整的智能感应和编译时检查支持

  (4)编译器在底层吧查询句法的表达式翻译成明确的方法调用代码,代码通过新的扩展方法和Lambda白大师语言特性来实现

  (5)等价比较--第一段代码的查询句法等价于第二段代码

    查询句法如下:

      

    等价代码如下:

      

  (6)LINQ查询句法可以实现90%以上T-SQL的功能(由于T-SQL是基于二维表的,所以LINQ的查询语法比T-SQL更简单和灵活),但是由于智能感应的原因,select不能放在一开始就输入.

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2013-03-27 14:58  Avrilliu  阅读(157)  评论(0编辑  收藏  举报