LINQ to Objects是LINQ的一部分,是查询对象集合的一种语法。首先看一下LINQ的体系结构,这样对LINQ有一个大致的了解。如图。

第一篇文章主要是回顾一下学习LINQ to Objects相关的基础知识,主要分为以下几个方面。

1,隐式类型局部变量

2,匿名类型

3,扩展方法

4,对象初始化器

5,集合初始化器

6,Lambda表达式

隐式类型局部变量

隐式类型局部变量,从名字中可以得出两层含义,一是隐式类型,即相对于显式类型(或称为强类型)而言的,指不需要指定具体类型,而是由右边表达式推断出的类型。第二层含义是局部变量,指的是只能用于方法内部的局部变量,不能用在字段或方法参数上。隐式类型局部变量通常是用var关键字表示的。演示代码如下。

//原来写法
string userName = "James";
int age = ;
string[] userList = new string[] { "a","b","c"};
foreach (string user in userList)
{
Console.WriteLine(user);
} //现在写法
var userName = "mcgrady";
var age = ;
var userList = new[] { "a", "b", "c" };
foreach (var user in userList)
{
Console.WriteLine(user);
}

匿名类型

匿名类型是C#的一种新特性,通常我们创建类型对象都是通过new关键字再跟上类名来创建的,但是匿名类型却不需要指定类型名称,而是由编译器为我们自动创建一个类型名称,而且不会告诉我们这个类型名称是什么。匿名类型又称为行内类型,通常与var关键字配合使用。演示代码如下。

var data = new { UserName = "mcgrady", Age = "" };
Console.WriteLine("UserName:{0},Age:{1}", data.UserName, data.Age);

扩展方法

扩展方法使我们当我们没有源代码的情形下,仍可以对CLR类型或自定义类型进行一些扩展操作。同时它也是学习LINQ to Objects的基础。另外,扩展方法只能定义在静态类的静态方法中,并且如果扩展方法名不能同原方法名同名,否则扩展方法将会失效。演示代码如下。

public static class StringExtension
{
/// <summary>
/// 将当前字符串转换为int
/// </summary>
/// <param name="str"></param>
/// <param name="result"></param>
/// <returns>如果成功则返回字符串的int形式,如果失败则返回默认值</returns>
public static int ToInt(this string str, int result = -)
{
int value;
if (int.TryParse(str, out value))
{
return value;
}
else
{
return result;
}
}
} //扩展方法调用
string str = "";
int result = str.ToInt();

对象初始化器

在没有对象初始化器之前,我们创建一个对象大概需要经过这么两个步骤,首先new一个对象,然后给每个字段赋值。而有了对象初始化器之后,原本需要几行代码才能完成的任务变成一行代码就可以完成,简化了代码,也使代码更优雅。演示代码如下。

//原来写法
Person person = new Person();
person.UserName = "James";
person.Age = ; //现在写法
Person person = new Person { UserName = "James", Age = };
Console.WriteLine("UserName:{0},Age:{1}", person.UserName, person.Age);

集合初始化器

使用集合初始化器,编译器会自动帮我们生成Add插入操作,前提是集合实现了IEnumerable接口。同对象初始化器一样,使用集合初始化器增强代码可读性的同时使我们写的代码量更少了。演示代码如下。

//原来写法
List<Person> personList = new List<Person>();
personList.Add(new Person { UserName = "Wade", Age = });
personList.Add(new Person{ UserName="Bosh", Age=});
personList.Add(new Person { UserName = "James", Age = }); //现在写法(使用集合初始化器)
List<Person> newPersonList = new List<Person>
{
new Person{ UserName="Wade", Age=},
new Person{ UserName="Bosh", Age=},
new Person{ UserName="James", Age=}
};

Lambda表达式

lambda表达式可以简单地理解为:它是在匿名方法的基础上,再进一步地简化了创建委托实例所需要的代码。后面会有一篇文章专门总结lambda表达式,它的语法格式为:(参数列表) => 表达式或者语句块,下面是一个简单的示例。

//lambda表达式
var selectionPerson = newPersonList.Where(p => p.Age > ).Select(p => p.UserName.ToUpper());
foreach (var item in selectionPerson)
{
Console.WriteLine(item);
}

LINQ to Objects系列(1)相关技术准备的更多相关文章

  1. LINQ to Objects系列(4)表达式树

    为了进一步加深对Lambda表达式的理解,我们需要掌握一个新的知识,Lambda表达式树,可能听名字看起来很高深和难以理解,但实际上理解起来并没有想象中那么难,这篇文章我想分以下几点进行总结. 1,表 ...

  2. LINQ to Objects系列(2)两种查询语法介绍

    LINQ为我们提供了两种查询语法,分别是查询表达式和查询方法语法.这篇文章分为以下几个方面进行总结. 1,一个包含两种查询语法的简单示例 2,查询表达式的结构 3,查询方法相关的运算符 一个包含两种查 ...

  3. LINQ to Objects系列(3)深入理解Lambda表达式

    Lambda表达式是学好LINQ很重要的一个知识点,后面的LINQ查询中会大量地使用到Lambda表达式.这篇文章从以下几点进行总结. 1,Lambda表达式的前世今生 2,Lambda表达式的实际运 ...

  4. Linq之Linq to Objects

    目录 写在前面 系列文章 linq to objects 总结 写在前面 上篇文章介绍了linq的延迟加载特性的相关内容,从这篇文章开始将陆续介绍linq to Objects,linq to xml ...

  5. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  6. [C#] Linq To Objects - 如何操作文件目录

    Linq To Objects - 如何操作文件目录 开篇语: 上次发布的 <LINQ:进阶 - LINQ 标准查询操作概述> 社会反响不错,但自己却始终觉得缺点什么!“纸上得来终觉浅,绝 ...

  7. LINQ之LINQ to Objects(上)

    LINQ概述 LINQ,语言集成查询(Language Integrated Query),它允许使用C#或VB代码以查询数据库相同的方式来操作不同的数据源. 1.LINQ体系结构 从上图可以看出,L ...

  8. 从LINQ开始之LINQ to Objects(上)

    LINQ概述 LINQ,语言集成查询(Language Integrated Query),它允许使用C#或VB代码以查询数据库相同的方式来操作不同的数据源. LINQ体系结构 从上图可以看出,LIN ...

  9. Linq之旅:Linq入门详解(Linq to Objects)【转】

    http://www.cnblogs.com/heyuquan/p/Linq-to-Objects.html Linq之旅:Linq入门详解(Linq to Objects) 示例代码下载:Linq之 ...

随机推荐

  1. mongdb window 服务安装批处理

    安装mongodb 3.x 安装完毕后 将以下代码保存为批处理 然后用管理员权限执行就可以成功安装服务了 cd C:\Program Files\MongoDB\Server\3.0\binmongo ...

  2. ConcurrentHashMap源码解析(1)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 注:在看这篇文章之前,如果对HashMap的层不清楚的话,建议先去看看HashMap源码解析. http:/ ...

  3. Python大黑阔—url采集+exp验证,带你批量测试

    i春秋作家:大木瓜 前言: 最近几天在整理从各处收集来的各种工具包,大大小小的塞满了十几个G的硬盘,无意间发现了一个好几年前的0day.心血来潮就拿去试了一下,没想到真的还可以用,不过那些站点都已经老 ...

  4. Tools - 浏览器Firefox

    简介 http://www.mozilla.org/ 中文官网:http://www.firefox.com.cn/ https://www.mozilla.org/zh-CN/firefox/ Mo ...

  5. css 图片文字居中

    1.单行文字居中 2.多行文字居中 3.利用background-position:center;的图片居中 4.利用display:table-cell;属性的图片居中 <!DOCTYPE h ...

  6. 第四章 PCA降维

    目录 1. PCA降维 PCA:主成分分析(Principe conponents Analysis) 2. 维度的概念 一般认为时间的一维,而空间的维度,众说纷纭.霍金认为空间是10维的. 3. 为 ...

  7. html头部标签大全

    http://www.css88.com/archives/8052#table-index

  8. 最短路变形 poj3615& poj2263

    问题: 牛要跨过一些障碍,希望以最小的体力跨过障碍,并且对于一条路径,只在乎其中最高的障碍. 输入N代表站点数,标记为1—N,输入M代表路径数,从站点S到E之间需要跨过高度为H的障碍. 输入T代表牛要 ...

  9. 7-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(TCP实现HTTP访问下载文件,明白底层如何实现的,地基稳才踏实)

    看了好多文章.....唉,还是自己亲自动手用网络监控软件测试吧 先看这个节安装WEB服务器.....安装好以后就可以用HTTP访问电脑文件了 6-STM32物联网开发WIFI(ESP8266)+GPR ...

  10. 计算机网络 之 TCP和UDP的端口号解析

    前言:今天了解一下tcp和udp报文的端口.发现一直以来都只是知道端口用于区分同一IP的服务器的不同服务,已经端口的大小.在查找traceroute的资料的时候,才了解到一些之前没注意到的东西. (一 ...