首页 > 代码库 > Linq语句概要

Linq语句概要

  这些都是在SQL语句中经常用到的,因此从形式上看,LINQ 语句与 SQL有很多相似之处。但尽管如此,还应该明确,LINQ与SQL是两种完全不同性质的语言: 

第一、 LINQ是面向对象的强类型(类型安全)语言; 

第二、 从理论上讲,LINQ几乎可以用来访问所有类型的数据(包括数据库)。 7.3.2 语句示例 

例1.下面是LINQ的一个表达式: 

var course = 

     from w in "语文 数学 英文 物理 计算机 伦理学 新闻学".Split()      where w.Length >2 

     orderby w.ToUpper() descending  // 按降序排列     select w; 

从表面上看,它像一组SQL语句,但它不是SQL。下面分别说明他们之间的区别: 1.在SQL语句中总是将Select放在最前面,而这里将from改放在最前面,在from与Select之间允许放入where、joins、orderby 或intos等子句。 

为什么顺序上要做这样的改变?这是因为只有先用from确定了应用范围,在后面的语句中才能更好地利用“智能提示”来选择字段等项。 

另外,在LINQ中,语句以及变量是区分大、小写的(在SQL语句不区分大小写)。 2.等号前面的“var course”形式,在JavaScript语言中经常可以看见,但它的含义与JavaScript也有所不同。这里的course是一个隐式类型的局部变量,它实际上是一个强类型变量,虽然没有明确定义,但它的类型由等号右边的语句来确定。编译时系统已经赋予它类型。 

用这种方式来定义变量类型有什么好处呢?不妨设想一下,如果等号的右边是一组查询语句(后面将讲到),而查询的结果可能是一个包括多个属性的复杂对象。为了获取结果,现在已经用不着花时间去定义它的类型了,定义它的工作完全由编译器来自动确定。 

3.语句中的w(也可以使用其他符号,如:p、m、n等)在传统的语句中比较少见,它是一个范围变量,在from、let、join或into中用来表示某个范围。这个变量的类型虽然没有直接定义,但是它的类型也由编译器确定。 

4.w是一个局部变量,它的有效范围只限于本表达式的内部。表达式总是用select或groupby子句来结束。 

例2.再看一个LINQ 程序: void Main() { 

  string[] words = 

    { "hello", "wonderful", "linq", "beautiful", "world" };   var shortWords = 

已修订

 

           from word in words            where word.Length <= 5            select word; 

  foreach (var word in shortWords)   Console.WriteLine(word); } 

[注]: LINQPad 是一个很好的学习LINQ工具.可以免费下载,网址是:http://www.linqpad.net 需下载两个文件: 

Download LINQPad.exe Download Setup.exe  

Lambda 表达式(Expression) 

Lambda Expression相当于嵌入到语句中的匿名函数,它非常简短,却可以包含丰富的内涵。Lambda Expression的格式如下:“    (参数列表) => 表达式或者语句块 其中: 

在参数列表中可以包括0到多个参数。参数的类型可以隐含也可以直接显示。隐含时属于什么类型,则由编译器根据前后文自动确定。 

表达式或者语句块就是我们平常写的函数的实现部分(函数体)。 几个典型的Lambda 表达式如下: 1.隐含类型的输入参数 

x => x + 1      // 一个参数 x => { return x + 1; } customer => customer.Name person => person.City == "Paris" (x, y) => x * y   // 多个参数 

(person, minAge) => person.Age >= minAge 

已修订

 

2.显示类型的输入参数 

(int x) => x + 1 

(int x) => { return x + 1; }  

3.无输入参数 

 ( ) => 1 

( ) => Console.WriteLine()   

显示类型的表达式也可以简化为隐含类型的表达式。如   (int x, int y) => x*y  可以简化为:   ( x, y ) => x * y  

其中“=>”念成“goes to”,它的左边代表输入参数;右边为表达式。编译后的结果如下: 

  int f (int x, int y)    { 

return x * y  } 

下面写一段程序来执行上述代码: static void Main() { 

  Func<int, int, int> add =(int x, int y) => x * y;   Console.WriteLine(add(6, 4));   Console.ReadLine();

 

Linq语句概要