集成化查询语言,相当于一个通用的数据查询接口
作用
面向对象中没有自己的查询语言,Linq是操作不同数据之间形成互通(交互、桥梁);
形成不同数据的统一的访问接口;配合EF进行多表关联查询
三大部分
Linq To Objects
Linq To Xml
Linq To ADO.NET
LINQ to ADO.NET主要负责数据库的查询,而LINQ to ADO.NET又包括 LINQ to SQL,LINQ to DataSet,LINQ to Entrties这三部分。(又分为三部分)
Linq to Sql
1.单表查询
//sql="select * from SysInfo"
var data = from a in db.SysInfo
select a;
//sql="select sname,spwd from SysInfo"
var data1 = from a in db.SysInfo
select new{
a.sname,
a.spwd
};
2.条件查询
[where 条件语句](进行条件筛选,可以使用&&、||链接多个条件)
where条件一般在取结果集之前筛找
where条件可以替换成 链式查询
在结果集后 .where(lamda表达式条件语句)
//sql="select * from SysInfo where sid<5"
var data = from a in db.SysInfo
where a.sid<5
select a;
//sql="select * from SysInfo where sid<5 and spwd!='123'"
data.Where(a => a.spwd != "123").ToList();
3.模糊查询
字符串中的contains方法
条件中的Contains("值") 模糊查询 ”值“ 被包含在a.aname里的所有值都会被查询到
//sql="select * from SysInfo where sname like '%张%'"
var data=from a in db.SysInfo
where a.sname.Contains("张")
select a
4.排序
使用链式查询
.OrderBy(lamda表达式) 顺序排
.OrderByDescending(lamda表达式) 倒序排
可以使用ThenBy ()/.ThenByDescending() 进行多项排序
//sql="select * from SysInfo orderby sid desc,spwd asc"
//倒序
var data=(from a in db.SysInfo
select a).OrderByDescending(a => a.sid).ThenBy(a=>a.spwd)
//sql="select * from SysInfo orderby sid asc,spwd desc"
//顺序
var data=(from a in db.SysInfo
select a).OrderBy(a => a.sid).ThenByDescending(a=>a.spwd)
5. in 关键字
结果集中是否包含所需要的字段
//sql="select * from SysInfo where sid in(1,2)"
int[] arr = { 1, 2 };
var datain=from a in db.SysInfo
where arr.Contains(a.sid)
select a;
6.聚合函数
max / min / sum / count / average...
直接在结果集后 使用链式查询(特定聚合函数方法)
//聚合函数
//sql="select max(sid) from SysInfo "
var datahs = (from a in db.SysInfo
select a).Max(a=>a.sid);
7.分组
//分组
//sql="select sid,count(sid) from SysInfo group by sid"
var datagroup = from a in db.SysInfo
group a by a.sid into g
select new {
/*=左边相当于别名*/
gid = g.Key,//分组的关键词 == a.sid
gcount=g.Count(),
};
8.多条件分组
//多字段分组
//sql="select sid,sname,count(sid) from SysInfo group by sid,sname"
var datagroupmore = from a in db.SysInfo
//匿名方式指代
group a by new { a.sid, a.sname } into g
select new
{
gid = g.Key.sid,
gname=g.Key.sname,
gcount = g.Count(),
};
9.联合查询 内联
//联合查询 内联
var datajoin = from a in db.SysInfo
join b in db.UserInfo
on a.sid equals b.gid //equals 相当于== Linq中无=
select new
{
a.sid,
a.sname,
b.uname,
b.uPhone
};
10.联合查询 左联
//联合查询 左联
var dataleftjoin = from a in db.SysInfo
join b in db.UserInfo
on a.sid equals b.gid into temp //把右表放入临时表
//右表的数据与左表无相关联的以空值填充
from t in temp.DefaultIfEmpty()
select new
{
a.sid,
a.sname,
// a,也可以直接取出a的所有,但是使用的时候需要进行转换
t.uname,
t.uPhone
};
11. LINQ 创建一个自定义模型类
Linq 的结构
var data= from in 开头 select 结尾
接受的结果集是动态类型,查询后的结果 使用 隐式类型 var接收
from 别名(自定义) in db.SysInfo(为取别名的表指定数据表)
[where 条件语句](进行条件筛选,可以使用&&、||链接多个条件)
select 查询的表结构及数据
//Linq from in 开头 select 结尾 配合ef进行多表操作
var data = from a in db.SysInfo
where a.sid<5
select a;