Linq基础知识小记一
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基础知识小记一的更多相关文章
- Linq基础知识小记四之操作EF
1.EF简介 EF之于Linq,EF是一种包含Linq功能对象关系映射技术.EF对数据库架构和我们查询的类型进行更好的解耦,使用EF,我们查询的对象不再是C#类,而是更高层的抽象:Entity Dat ...
- Linq基础知识小记三
1.子查询 Linq中的子查询思想和Sql中的子查询其实差不多, 对于方法语法,一个子查询包含在另一个子查询的Lambda表达式中,代码如下: string[] names = { "Jam ...
- Linq基础知识小记二
书写Linq查询有两种方法,第一种是通过方法语法(也就是扩展方法),第二种是查询表达式语法. 1.方法语法 方法语法就是通过扩展方法和Lambda表达式来创建查询 (1).链式查询 这种查询方式很多语 ...
- EF基础知识小记四(数据库=>模型设计器)
EF基础知识小记三(设计器=>数据库)介绍了如何创建一个空设计器模型,并如何将模型同步到数据库的表中,本文则主要介绍如何将一个存在的数据库同步到模型设计器中.为了能快速的模拟这个过程,给出一下建 ...
- EF基础知识小记七(拆分实体到多个表以及拆分表到多个实体)
一.拆分实体到多个表 1.在日常开发中,会经常碰到一些老系统,当客户提出一些新的需求,这些需求需要在原来的表的基础上加一些字段,大多数人会选择通过给原表添加字段的方式来完成这些需求,方法,虽然可行,但 ...
- EF基础知识小记一
1.EF等ORM解决方案出现的原因 因为软件开发中分析和解决问题的方法已经接近成熟,然后关系型数据库却没有,很多年来,数据依然是保存在表行列这样的模式里,所以,在面相对象和高度标准化的数据库中产生了一 ...
- Linq基础知识之延迟执行
Linq中的绝大多数查询运算符都有延迟执行的特性,查询并不是在查询创建的时候执行,而是在遍历的时候执行,也就是在enumerator的MoveNext()方法被调用的时候执行,大说数Linq查询操作实 ...
- Linq基础知识
开发人员不需要关心将要访问的是关系数据库还是XML数据,或是远程对象,它都采用同样的访问方式. Linq包含一系列的查询技术,其中Linq到对象是对内存进行操作,LINQ到SQL是对数据库的操作,LI ...
- web基础知识小记
随机推荐
- Android 6.0以上 需要运行时申请的权限
转载:http://www.cnblogs.com/tangs/articles/6377347.html 自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifes ...
- 3) Maven 目录结构
进入maven根目录 cmd 命令 tree E:. │ LICENSE.txt │ NOTICE.txt │ README.txt │ ├─bin │ m2.conf │ mvn │ mvn.bat ...
- Android中的Service 与 Thread 的区别[转]
很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下. 1). Thread:Thre ...
- What if you are involved in an automobile accident in the US
What if you are involved in an automobile accident in the US With increasing Chinese tourists and vi ...
- delphi TStringList 用法详解
转自: http://blog.163.com/you888@188/blog/static/67239619201472365642633/ delphi TStringList 用法详解 2014 ...
- Sql Server 2008 压缩数据库日志文件
第一步:将数据库设置为简单模式 选中数据库点右键->属性: 第二步:收缩数日志文件 1, 2, 第三步:将恢复模式改回为完整模式 如果你觉得用UI界面麻烦,那你就用SQL语句吧 ...
- TFS支持移动设备,微软已经走出了第一步(手机上更新、查询工作项)
TFS支持移动设备,微软已经走出了第一步! 从现在开始,你可以在手机浏览器上打开自己的VSTS团队项目,会看大手机版的工作项界面,你可以在手机设备上更新.查询工作项. 这是原生自带的,这些移动功能马上 ...
- LeetCode138:Copy List with Random Pointer
题目: A linked list is given such that each node contains an additional random pointer which could poi ...
- 射线和三角形的相交检测(ray triangle intersection test)【转】
本文以Fast, Minimum Storage Ray Triangle Intersection为参考,在此感谢原作者,大家也可以直接阅读原版. 概述 射线和三角形的相交检测是游戏程序设计中一个常 ...
- 设计模式之状态模式(State Pattern)
一.什么是状态模式? 把所有动作都封装在状态对象中,状态持有者将行为委托给当前状态对象 也就是说,状态持有者(比如汽车,电视,ATM机都有多个状态)并不知道动作细节,状态持有者只关心自己当前所处的状态 ...