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基础知识小记
随机推荐
- angularjs写公共方法
'use strict'; angular.module('fast-westone') .factory('commonUtilService', function () { return { /* ...
- UVa 12230 && HDU 3232 Crossing Rivers (数学期望水题)
题意:你要从A到B去上班,然而这中间有n条河,距离为d.给定这n条河离A的距离p,长度L,和船的移动速度v,求从A到B的时间的数学期望. 并且假设出门前每条船的位置是随机的,如果不是在端点,方向也是不 ...
- Linux将程序添加到服务的方法(通用)
一:咱们通过这篇文章来演示怎么将某个程序作为服务(就类似Windows服务可以开机自动启动),这里以tomcat为例,已经亲测过: 二:步骤(最好用root用户来做这种事情,切换root用户记得su ...
- pyhthon 求GPA平均学分绩点
#coding=utf-8 ''' 北大4.0 成绩 学分 100-90 4.0 89-85 3.7 84-82 3.3 81-78 3.0 77-75 2.7 74-72 2.3 71-68 2.0 ...
- hdu 4952 暴力
http://acm.hdu.edu.cn/showproblem.php?pid=4952 给定x,k,i从1到k,每次a[i]要是i的倍数,并且a[i]大于等于a[i-1],x为a0 递推到下一个 ...
- 论文笔记(2)-Dropout-Regularization of Neural Networks using DropConnect
这篇paper使用DropConnect来规则化神经网络.dropconnect和dropout的区别如下图所示.dropout是随机吧隐含层的输出清空,而dropconnect是input unit ...
- ChicagoBoss简介
翻译人:李罗琦 (ChicagoBoss)[http://www.chicagoboss.org] 由 Evan Miller创作,使用erlang/OTP的开发者们可以通过它提供的一个类似于Ruby ...
- 获取微信签名,并保存在xml文件中
using System; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using Sys ...
- 初探Angular_03 组件中模板数据绑定
这里将介绍三种情况的数据绑定 需要TypeScript的基本知识,如TS数据类型 一.模板属性绑定数据 1.模板属性其实HTML的属性,如class,style,title等 2.先在header.c ...
- 关于ORACLE的字符窜存储(未完善,欢迎补充)
oracle中常见的用于存储字符串的数据类型有: 数据类型 是否定长 最多存储数 效率排行 备注 是否oracle特有 英文占位 中文占位 char 是 2000 比VARCHAR2稍高 char的长 ...