Linq Lambda表达式基础概括

开发 后端
这里介绍Linq Lambda表达式包含多个关键部分。Linq Lambda表达式首先定义传入委托的变量。在以上代码示例中,x(在 => 操作符左侧声明)是参数,代表传递给它的 nums 数组中的每个元素。

在向大家详细介绍Linq之前,首先让大家了解下Linq Lambda表达式,然后全面介绍Linq。

Linq Lambda表达式

许多标准查询操作符在对序列执行运算时都使用 Func 委托来处理单个元素。Linq Lambda表达式可与标准查询操作符结合使用以代表委托。Linq Lambda表达式是创建委托实现的简略表达形式,并可用于匿名委托适用的所有场合。C# 和 Visual Basic® .NET 均支持 Linq Lambda表达式。但是,必须注意:由于 Visual Basic .NET 尚不支持匿名方法,Linq Lambda表达式可能仅包含一个语句。

让我们来看看如何对一个整数数组使用 Single 操作符。这个整数数组的每个元素代表 2 的 1 到 10 次方。先创建此数组,然后使用 Single 操作符来检索满足 Linq Lambda表达式中指定条件的单个整数元素:

  1. int[] nums = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 };  
  2. int singleNum = nums.Single(x => x > 16 && x < 64);  
  3. Console.WriteLine(singleNum.ToString()); 

Linq Lambda表达式包含多个关键部分。Linq Lambda表达式首先定义传入委托的变量。在以上代码示例中,x(在 => 操作符左侧声明)是参数,代表传递给它的 nums 数组中的每个元素。Linq Lambda表达式的剩余部分代表数组中每个元素的评估逻辑。可使用匿名委托轻松地重新编写以上表达式,如下所示:

  1. int singleNum = nums.Single<int>(  
  2. delegate(int x) {return (x > 16 && x < 64); }  
  3. ) ; 

但是,此代码的可读性不及 Linq Lambda表达式。C# 2.0 引入了可使委托的传递稍微轻松些的匿名委托;但是,Linq Lambda表达式的简洁语法可使其更加简单。

First和Single

如果必须从序列中提取一个值,First、FirstOrDefault、Single 和 SingleOrDefault 操作符都非常有用。First 方法返回序列中的***个元素。First 有一个重载方法,可使用它来传入 Linq Lambda表达式来代表一个条件。例如,如果要返回整数序列中整数元素大于 50 的***个元素,可使用以下代码示例:

  1. int[] nums = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 };  
  2. int num1 = nums.First<int>();  
  3. int num2 = nums.First<int>(x => x > 50);  
  4. int num3 = nums.FirstOrDefault<int>(x => x > 5000);  
  5.  
  6. Console.WriteLine(  
  7. num1.ToString() + "-" +   
  8. num2.ToString() + "-" +   
  9. num3.ToString()); 

此代码会查找***个元素 (1)、大于 50 的***个元素 (64) 以及大于 5,000 的***个元素。由于数组中没有元素满足第三个 Linq Lambda表达式(数组中无整数大于 5,000),则如果代码使用的是 First 操作符而非 FirstOrDefault,则会引发异常。在使用 FirstOrDefault 操作符时,如果没有元素满足 Linq Lambda表达式,则会返回 0。First 操作符也可用于 LINQ to Entities 查询,如下所示:

  1. using (Entities entities = new Entities())  
  2. {  
  3. var query = (from c in entities.Customers  
  4. select c).First(c => c.City.Equals("London"));  
  5. Console.WriteLine(query.CompanyName);  

在此示例中,将返回 London 城中的***个客户。正如您所看到的,当 First 方法用于各种 LINQ 提供程序(在本例中为 LINQ to Objects 和 LINQ to Entities)时,所用的语法并不会更改。

【编辑推荐】

  1. LINQ to SQL查询分析
  2. LINQ查询架构简单介绍
  3. LINQ to SQL映射关系概述
  4. LINQ To SQL对象模型浅析
  5. LINQ to SQL映射列描述
责任编辑:佚名 来源: CSDN
相关推荐

2009-09-15 15:18:00

Linq Lambda

2009-09-11 09:48:27

Linq Lambda

2009-09-09 13:01:33

LINQ Lambda

2009-09-17 10:40:22

Linq Lambda

2009-09-17 09:44:54

Linq Lambda

2009-09-17 09:09:50

Lambda表达式Linq查询

2009-09-09 17:14:17

Linq lambda

2009-09-17 11:08:55

LINQ查询表达式

2009-09-09 17:45:07

Linq表达式

2009-09-17 14:21:19

LINQ表达式

2009-09-11 12:32:33

LINQ表达式

2009-09-10 15:35:07

LINQ查询表达式

2011-10-28 16:34:13

LINQ

2022-12-05 09:31:51

接口lambda表达式

2009-09-07 17:18:33

LINQ查询表达式

2009-08-27 09:13:28

LINQ查询表达式

2009-09-11 09:53:16

Linq查询表达式

2009-09-17 09:15:49

Linq表达式树

2012-06-26 10:03:58

JavaJava 8lambda

2009-09-16 10:08:06

LINQ查询
点赞
收藏

51CTO技术栈公众号