Linq就是Language Integrated Query的缩写,即语言集成查询,是微软在.Net 3.5中提出的 一项新技术, Linq主要包含4个组件——Linq To Objects、Linq To XML、Linq To DataSet 和Linq To SQL。
我们操作linq一般来说有两种方式,一种是lamdba表达式+扩展方法,还有一种就是表达式,表达式方式跟sql差不多,区别就是我们这是按照sql执行顺序来的,比如:sql写法就是select row from tb,表达式的写法就是 from tb select row这样
下面我们来演示lamdba、表达式和普通方法的区别:
static void Main(string[] args)
{
var list = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//lamdba 扩展方法
var counts1 = list.Where(t => t % 2 == 0).Count();
//表达式
var counts2 = (from t in list
where t % 2 == 0
select t
).Count();
//表达式
var counts3 = 0;
for (int i = 0; i < list.Length; i++)
{
if (list[i] % 2 == 0)
{
counts3++;
}
}
Console.WriteLine("lamdba方式输出:{0}", counts1);
Console.WriteLine("表达式方法输出:{0}", counts2);
Console.WriteLine("一般方式输出:{0}", counts3);
Console.Read();
}
lamdba方式输出:5
表达式方法输出:5
一般方式输出:5
查询操作符(扩展方法+lambda),扩展方法 扩展的事IEnumerable<T>接口。所以linq的基础都是集合要继承IEnumerable<T>。
过滤:where,Find,FindAll,FindLast,First<T>,FirstOrDefault<>
统计函数:Count,MIn,Sum,Max
排序:OrderBy,OrderByDescending
跳过前面多少条数据取余下的数据:SKIP,如:list.Skip(rows * (pages - 1)),就是我们一般用的分页了
从开始起获取指定数量的数据:TAKE
模糊匹配:Contains
分组:GroupBy
连接查询:Join
投影:select(select t或者select(t=>new{t.1,t.2}))
2,查询表达式
From [type] id in source
[join [type] id in source on expr equals expr [into subGroup]]
[from [type] id in source|let id=expr | where condition]
[orderby ordering,ordering,ordering,ordering...]
select select expr | group expr by key
[into id query]
tips:type是可选的,id是数据源集合中的一项,source是数据源集合, 其实是在一直循环source,每次循环把值放入select后面
expr表示一个表达式,subGroup是一个临时变量,继承自IGroup,代表一个分组。
可以有多个form,多个where,set指定临时变量
可以有0-多个排序 orderby a descing orderby b。 orderby a descing ,b,c
select new投影(匿名类,返回的类型用var 因为他生成的时候一后台定义的类型集合),group 类型 by 具体属性。标准linq 前面一般写一个var(不确定类型)。 一个查询表达式必须以select或者group by结束。select后跟要检索的内容。group by 是对检索的内容进行分组
group by 他后面只能跟 into is as 关键字,常用into 关键字放入临时数据源 然后在select 投影。
into放入临时数据源
Let 设置变量
注意:这种查询表达式会编译成上面的扩展方法+lambad。这种是一个语法糖。