1、LINQ(语言级集成查询)的作用就是提供一种统一且对称的方式,让程序员在广义的数据上获取和操作数据。广义的数据包括XML文档数据、元数据、System.Data.dll和System.Data.SqlClient.dll提供的DataSet和DataTable等数据、内存数据(Array、Collection)等.

2、Linq To Object是针对实现了IEnumerable<T>的对象操作或获取数据的功能,代码如下:

(1)、通过Enumerable的实例方法实现查询

string[] str = {"Tom", "Dick", "Harry"};
IEnumerable<string> filteredNames = Enumerable.Where(str, delegate(string s)
{
return s.Length > ;
});
foreach (var name in filteredNames)
{
Console.WriteLine(name);
}

(2)、使用扩展方法

因为查询预算符是以扩展方法的形式实现的,所以如下代码也可以:

string[] str = {"Tom", "Dick", "Harry"};
var filteredNames = str.Where(n=>n.Length>); foreach (var name in filteredNames)
{
Console.WriteLine(name);
}

(3)、使用查询表达式语法

C#提供了一种类似sql语句的写法来操作集合数据,代码如下:

string[] str = {"Tom", "Dick", "Harry"};
var filteredNames =
from n in str
where n.Length > & n.Contains('a')
select n; foreach (var name in filteredNames)
{
Console.WriteLine(name);
}

3、扩展方法

Linq的大多数查询操作方法是扩展方法

what is expended method?  请参考

4、代码写法分析

当使用Linq对集合数据进行操作查询时,往往有很多种方法,这里主要分析的是传统委托方法和匿名方法和Lambda表达式.

举个例子查询一个List<int>()集合中的偶数项.

(1)、传统委托方法

        static void Main(string[] args)
{
List<int> list=new List<int>();
list.AddRange(new int[]{,,,,,});
Predicate<int> pre = new Predicate<int>(IsNumber);
var res = list.FindAll(pre);;
foreach (var item in res)
{
Console.WriteLine(item);
}
Console.ReadKey();
} static bool IsNumber(int i)
{
return i % == ;
}

(2)、升级,匿名方法取代传统委托

            List<int> list=new List<int>();
list.AddRange(new int[]{,,,,,});
Predicate<int> pre = new Predicate<int>(delegate(int i)
{
return i % == ;
});
var res = list.FindAll(pre);;
foreach (var item in res)
{
Console.WriteLine(item);
}
Console.ReadKey();

(3)、最后,Lambda登场

            List<int> list=new List<int>();
list.AddRange(new int[]{,,,,,});
var res = list.FindAll(n=>n%==);;
foreach (var item in res)
{
Console.WriteLine(item);
}
Console.ReadKey();

5、对象初始化

(1)、常规初始化

public class Test
{
public string A{ get; set; }
public string B{ get; set; }
} static void Main()
{
Test te=new Test{A='a',B='b'};
};

(2)、内部对象初始化

public class Rectangle
{
public Point TopLeft { get; set; }
public Point BottomRight { get; set; }
} static void CompareObjectInitMethods()
{
// 传统初始化方法
Rectangle r = new Rectangle();
Point p1 = new Point();
p1.X = ;
p1.Y = ;
r.TopLeft = p1;
Point p2 = new Point();
p2.X = ;
p2.Y = ;
r.BottomRight = p2; // 对象初始化语法
Rectangle r2 = new Rectangle
{
TopLeft = new Point { X = , Y = },
BottomRight = new Point { X = , Y = }
};
}

(3)、集合初始化

static void CollectionInitSyntax()
{
// 初始化标准数组
int[] numbers = { , , , , , , , , , }; // 初始化一个ArrayList
ArrayList list = new ArrayList { , , , , , , , , , }; // 初始化一个List<T>泛型容器
List<int> list2 = new List<int> { , , , , , , , , , }; // 如果容器存放的是非简单对象
List<Point> pointList = new List<Point>
{
new Point { X = , Y = },
new Point { X = , Y = }
}; // 使用恰当的缩进和嵌套的大括号会使代码易于阅读,同时节省我们的输入时间
// 想想如果不使用初始化语法构造如下的List,将需要多少行代码
List<Rectangle> rectList = new List<Rectangle>
{
new Rectangle { TopLeft = new Point { X = , Y = },
BottomRight = new Point { X = , Y = }},
new Rectangle { TopLeft = new Point { X = , Y = },
BottomRight = new Point { X = , Y = }},
new Rectangle { TopLeft = new Point { X = , Y = },
BottomRight = new Point { X = , Y = }}
};
}

Linq基础知识小记一的更多相关文章

  1. Linq基础知识小记四之操作EF

    1.EF简介 EF之于Linq,EF是一种包含Linq功能对象关系映射技术.EF对数据库架构和我们查询的类型进行更好的解耦,使用EF,我们查询的对象不再是C#类,而是更高层的抽象:Entity Dat ...

  2. Linq基础知识小记三

    1.子查询 Linq中的子查询思想和Sql中的子查询其实差不多, 对于方法语法,一个子查询包含在另一个子查询的Lambda表达式中,代码如下: string[] names = { "Jam ...

  3. Linq基础知识小记二

    书写Linq查询有两种方法,第一种是通过方法语法(也就是扩展方法),第二种是查询表达式语法. 1.方法语法 方法语法就是通过扩展方法和Lambda表达式来创建查询 (1).链式查询 这种查询方式很多语 ...

  4. EF基础知识小记四(数据库=>模型设计器)

    EF基础知识小记三(设计器=>数据库)介绍了如何创建一个空设计器模型,并如何将模型同步到数据库的表中,本文则主要介绍如何将一个存在的数据库同步到模型设计器中.为了能快速的模拟这个过程,给出一下建 ...

  5. EF基础知识小记七(拆分实体到多个表以及拆分表到多个实体)

    一.拆分实体到多个表 1.在日常开发中,会经常碰到一些老系统,当客户提出一些新的需求,这些需求需要在原来的表的基础上加一些字段,大多数人会选择通过给原表添加字段的方式来完成这些需求,方法,虽然可行,但 ...

  6. EF基础知识小记一

    1.EF等ORM解决方案出现的原因 因为软件开发中分析和解决问题的方法已经接近成熟,然后关系型数据库却没有,很多年来,数据依然是保存在表行列这样的模式里,所以,在面相对象和高度标准化的数据库中产生了一 ...

  7. Linq基础知识之延迟执行

    Linq中的绝大多数查询运算符都有延迟执行的特性,查询并不是在查询创建的时候执行,而是在遍历的时候执行,也就是在enumerator的MoveNext()方法被调用的时候执行,大说数Linq查询操作实 ...

  8. Linq基础知识

    开发人员不需要关心将要访问的是关系数据库还是XML数据,或是远程对象,它都采用同样的访问方式. Linq包含一系列的查询技术,其中Linq到对象是对内存进行操作,LINQ到SQL是对数据库的操作,LI ...

  9. web基础知识小记

随机推荐

  1. C++之类和对象的使用(三)

    对象数组 如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供.Student stud[3]={90,92,01};//合法 如果构造函数有多个参数,则不能用在定义时直接所提供所有 ...

  2. flac3d自定义变量输出云图

    定义单元体能量为微单元体的应变比能,即当应力和应变满足线性关系时,微单元体在三向应力状态下的应变比能为: (3.1) 下面代码为用户自定义云图显示变量. Flac3d Code new gen zon ...

  3. Robot Perception for Indoor Navigation《室内导航中的机器人感知》

    Felix Endres 论文下载 Technische Fakult¨ atAlbert-Ludwigs-Universit¨ at Freiburg Betreuer: Prof. Dr. Wol ...

  4. MFC OnOk(),OnCancel(),OnClose(),OnDestroy()的区别总结

    MFC OnOk(),OnCancel(),OnClose(),OnDestroy()的区别总结(转) 第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和O ...

  5. Vivado级联Modelsim仿真Re-launch问题

    前两天在群里看到有朋友说Vivado级联Modelsim仿真出现修改设计代码后重新run do文件,波形没有随着代码修改而改变,这个问题博主之前没有注意到,因为把Vivado和Modelsim级联好后 ...

  6. test命令详解

    test命令格式: test condition 通常,在if-then-else语句中,用[]代替,即[ condition ].注意:方括号两边都要用空格.   1.数值比较 ========== ...

  7. ListView的另一种可读性更强的ViewHolder模式写法

    常见的写法是这样的: @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHol ...

  8. SQL笔记---多表左联

    这是实际场景当中的一个例子,拿出来分析总结思路. -- SQL 查询 --SELECT  orderQuery.Rk_SkuCode ,        orderQuery.SkuName,      ...

  9. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization【转】

    https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-game_Proto ...

  10. maven仓库地址配置

    # 背景 maven中央存库在国外,访问缓慢,一般国内镜像,这里推荐阿里云的 http://maven.aliyun.com/nexus/content/groups/public 我之前采用的方式是 ...