Linq 学习(1) 概述

本篇简单回顾C#语言集合操作的变化,通过与Linq对等的面向对象的语法来认识Linq。
Linq是Language
Integrated Query, 初识Linq感觉跟SQL
Server的Tsql很像,可以进行语言必备的逻辑操作,也可以实现对集合的直接查询。

Net1.X时代
C#不支持泛型,集合用元素只能为object类型的ArrayList等。
添加、取出元素都与Object类型进行强制类型转换,
如果是值类型要进行装箱操作,取出元素时进行拆箱操作,影响效率,
编译时不进行类型检查,类型不匹配运行时可能出错。
定义实体类:
public class Employee 

    private string _Name; 
    private int _Age; 
    private string _Phone; 

    public string Name 
    { 
        get { return _Name;

        set {
_Name = value;

    } 

    public int Age 
    { 
        get { return _Age;

        set {
_Age = value;

    } 

    public string Phone 
    { 
        get { return _Phone;

        set {
_Phone = value;

    } 

    public Employee(string name, int age, string phone) 
    { 
        _Name = name; 
        _Age = age; 
        _Phone = phone; 
    } 
}

初识化集合:
这进行类型转换。

ArrayList
list; 
list = new ArrayList(); 
list.Add(new Employee("Zxjay", 20, "010-123456")); 
list.Add(new Employee("Andy", 30, "020-123456")); 
list.Add(new Employee("Bill", 50, "010-3456789")); 
list.Add(new Employee("Lee", 40, "0532-234567"));

排序:
需实现IComparer接口。

class SortArrayList :
IComparer 

    public int Compare(object x, object y) 
    { 
        Employee
a = x as Employee; 
        Employee
b = y as Employee; 

        return a.Name.CompareTo(b.Name); 
    } 


list.Sort(new SortArrayList());

遍历每个元素取得符合条件的元素放到新的集合:
这里也进行类型转换。

ArrayList
selectedList = new ArrayList(); 

foreach (object obj in list) 

    Employee
emp = obj as Employee; 

    if (emp != null && emp.Phone.StartsWith("010") && emp.Age < 50) 
    { 
        selectedList.Add(emp); 
    } 
}

输出集合元素:
这里也进行类型转换。

private void ShowList(ArrayList
list) 

    Console.WriteLine("{0,-20:G}{1,-5:G}{2}", "Name", "Age", "Phone"); 

    foreach (object obj in list) 
    { 
        Employee
emp = obj as Employee; 

        if (emp != null) 
        { 
            Console.WriteLine("{0,-20:G}{1,-5:G}{2}",
emp.Name, emp.Age,
emp.Phone); 
        } 
    } 
}

.NET
2.0时代

加入了泛型和匿名方法,代码量减少,逻辑清晰了许多,编译期间强类型检查和去掉了强制类型转换及装箱、拆箱操作。
定义实体类跟.NET
1.1时代一样。
排序选择直接用匿名方法实现:

list.Sort( 
    delegate(Employee
x, Employee
y) 
    { 
        return x.Name.CompareTo(y.Name); 
    } 
    ); 

List<Employee> listBeijing = list.FindAll( 
    delegate(Employee
emp) 
    { 
        return emp.Phone.StartsWith("010") && emp.Age < 50; 
    } 
    );

输出集合元素:
这里去掉了强制类型转换。

private void ShowList(IList<Employee> list) 

    Console.WriteLine("{0,-20:G}{1,-5:G}{2}", "Name", "Age", "Phone"); 

    foreach (Employee
emp in list) 
    { 
        Console.WriteLine("{0,-20:G}{1,-5:G}{2}",
emp.Name, emp.Age,
emp.Phone); 
    } 
}

.Net
3.X时代

自动属性、扩展方法、隐含类型、匿名类型、类型集合初识化器、Lambda表达式,有大大简化了编程复杂度。
定义实体类:
用自动属性。
public class Employee 

    public string Name
{ get; set;

    public int Age
{ get; set;

    public string Phone
{ get; set; } 
}

初始化集合:
list = new List<Employee> 

    new Employee{
Name = "Zxjay",
Age = 20,
Phone = "010-123456" }, 
    new Employee{
Name = "Andy",
Age = 30,
Phone = "020-123456" }, 
    new Employee{
Name = "Bill",
Age = 50,
Phone = "010-345678" }, 
    new Employee{
Name = "Lee",
Age = 40,
Phone = "010-234567" } 
};

排序选择:
用Lambda表达式实现:
list.Sort((Employee x, Employee
y) => { return x.Name.CompareTo(y.Name);
}); 
var listBijing = list.FindAll( 
    (Employee
emp) => { return emp.Phone.StartsWith("010") && emp.Age < 50;
});

输出集合元素:
用扩展方法。
private void ShowList(List<Employee> list) 

    Console.WriteLine("{0,-20:G}{1,-5:G}{2}", "Name", "Age", "Phone"); 

    list.ForEach((Employee
emp) => Console.WriteLine("{0,-20:G}{1,-5:G}{2}",
emp.Name, emp.Age, emp.Phone)); 
}

这些查询大大简化,但这些还是面向对象的方法。
Linq这样实现排序选择等操作:
var selectResult = from emp in list 
                   where emp.Phone.StartsWith("010") && emp.Age < 50 
                   orderby emp.Name 
                   select emp;

这才是真正意义上的语言集成查询,是不是似曾相识?跟SQL语句相似,只是把select字句放在最后。
本篇仅仅是对Linq的概述及语言内集合查询机制的变化的概要介绍,Linq的内容将在下面的内容一步一步展开。

Linq 学习(1) 概述,布布扣,bubuko.com

时间: 2024-10-08 10:04:08

Linq 学习(1) 概述的相关文章

Maven学习(一)—— 概述

为接手gxpt准备已经快一个月了从SSH2-->EJB-->环境搭建-->Maven的构建.下面就带领大家初始Maven 一.什么是Maven. Maven是一个垮平台的项目管理工具,主要服务于Java平台的项目构建.依赖管理和项目信息管理.Maven是一个能够帮我们自动化构建过程,充清理.编译.测试到生成报告,再到打包和部署.我们不需要一遍又一遍的输入命令,这些工作Maven都为我们做好了.Maven最大化地消除了构建的重复.在Maven以前,十个项目可能有十种构建方式:有了Maven

jquery学习之概述

jquery库的概述 jquery是继承Prototype之后的又一个优秀的Javascript库,由美国人Jone Resig创建于2006年1月,包括核心库,UI和插件等几部分,其宗旨是Writes less, do more. 官方网站:http://jquery.com/ jquery的版本分为压缩版(*.min.js)和非压缩版(*.js),压缩版供直接使用,非压缩版供调试使用,提供了插件供其它开发工具用作智能提醒. 一:核心函数jQuery,可以简写为$ 函数 功能 jQuery(e

Linq 学习笔记

简介: LINQ 提供一种统一的方式,让我们能在C#语言中直接查询和操作各种数据.?? LINQ是用来描述数据访问总体方式的术语.LINQ to Object是针对实现了IEnumerable<T>的对象的LINQ:LINQ to SQL是针对关系数据库的LINQ:LINQ to XML是针对XML文档的LINQ.? ? LINQ除了提供一个统一的API来操作各种数据,并且为我们提供了编译时类型检查和动态创建查询表达式的能力.? LIINQ相关的C#语言功能 1.隐式类型局部变量 局部变量用v

Linq学习(二)-LinQ to Entity

在昨天我学习了LinQ的一些基础知识和动手写了一些LinQ to Object的例子的基础上,对于LinQ语法和基本的要点有了一定的了解.今天继续自己的学习,对于今天学习的LinQ to DataSet 和LinQ to Entity做自己的一些总结,一方面加深自己的理解,另一方面也能掌握LinQ技术的实现机制,对于也跟我一样对着一方面有兴趣的也可以让大家有个初步的感性认识,也是好的. 今天主要的篇幅会讲解LinQ to Entity的C#实现机制以及解决昨天我看完一小节之后的两点疑惑,后面会花

C#之Linq学习笔记【转】

写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些兴趣,所以打算整理点东西出来跟大家一起做个分享. 什么是Linq LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性.已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知.静态类型等强类型语言的好处.并

迁移学习全面概述:从基本概念到相关研究

目录: 1.什么是迁移学习? 2.为什么现在需要迁移学习? 3.迁移学习的定义 4.迁移学习的场景 5.迁移学习的应用 从模拟中学习 适应到新的域 跨语言迁移知识 6.迁移学习的方法 使用预训练的 CNN 特征 学习域不变的表征 让表征更加相似 混淆域 7.相关的研究领域 半监督学习 更有效地使用可用的数据 提高模型的泛化能力 让模型更加稳健 多任务学习 持续学习 zero-shot 学习 8.总结 ------------------------------------------------

LINQ学习系列-----2.3 迭代器带来的延迟查询

此篇博文承接上一篇博文: LINQ学习系列-----2.2 迭代器 一.第一次执行                      废话不多说,上源码: 执行结果下图: 为什么会这样?其实原因很简单 from n in intArray select Square(n) 可以翻译为:Enumerable.Select<int,double>(intArray,n=>Square(n)); 看过上一篇文章的基本信息知道一些了,Enumerable.Select就是个迭代器,这也是延迟查询的奥秘.

Linq学习之旅——LINQ查询表达式

1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. 概述 LINQ的全称是Language Integrated Query,中文译成“语言集成查询”.LINQ作为一种查询技术,首先要解决数据源的封装,大致使用了三大组件来实现这个封装,分别是LINQ to Object.LINQ to ADO.NET.LINQ to XML.它们和.NET语言的关系如下:

SOC学习历程概述

从开始接触soc到现在大概有两年半左右的时间了,经历了ORSOC到minsoc再到mkg-soc的搭建,以及现在的大小核系统的搭建 首先先讲下学习的前期需要具备的知识,前面3点是必须,后面3点可以中间学习的过程再学习.之所以有这些要求主要是以防中间的学习过程中,有些东西看不懂而走弯路. 学习的前期准备:1.学过数电,有一定的电路基础.2.熟练掌握verilog语言.3.对于计算机组成原理,体系结构有一定的了解.4.学过单片机编程,写过一些简单的裸机程序,最好能够玩过microblaze这样对于软