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基础知识小记
随机推荐
- Java IO之字符流
public static void main(String[] args) { FileWriter fw = null; try { fw = new FileWriter("/User ...
- HDU 3079 Vowel Counting (水题。。。判断元音)
题意:n个字符串,如果元音就是输出大写,否则输出小写. 析:没啥可说的,只要判断AEIOU就OK了. 代码如下: #include <iostream> #include <cstd ...
- Python 正斜杠/与反斜杠\
首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Wi ...
- NATAPP打穿内网
前一篇博文写了ngrok作为内网穿透工具现在开始开始学习另外一种内 网穿透natapp(他也是基于ngrok的一种高速内网穿透服务)多的介绍就 不说了,开始进入正题. 第一步:先登录natapp官网( ...
- 记一次项目使用webuploader爬坑之旅
因前端页面开发使用的为VUE开发,又要支持IE9,遂只有基于webuploader封装一个上传组件.地址:https://github.com/z719725611/vue-upload-web ...
- (并查集)The Suspects --POJ --1611
链接: http://poj.org/problem?id=1611 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#probl ...
- HDU6023 Automatic Judge 2017-05-07 18:30 73人阅读 评论(0) 收藏
Automatic Judge Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...
- POJ3026 Borg Maze 2017-04-21 16:02 50人阅读 评论(0) 收藏
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14165 Accepted: 4619 Descri ...
- 对话框的按键处理 PreTranslateMessage、OnKeyDown和OnChar
对话框的按键处理 PreTranslateMessage.OnKeyDown和OnChar 1.MFC对话框不能响应OnKeyDown和OnChar函数(1)现象 在MFC的对话框中,映射了WM_C ...
- [CentOS]Centos设置PATH全局变量
PATH确认方法 $ echo $PATH 根据优先级先后顺序用:分割,因此可以复数指定 PATH设定方法(临时) $ export PATH=$PATH:/usr/local/scala/bin P ...