(作者:张滋,撰写时间:2019年4月15日)
Linq语句查询在MVC里操作Linq语句,一般来说有两种方式,一种是Lambda表达式+扩展方法,还有另一种就是表达式,然而这个表达式的方式跟sql数据库的方式是差不多的,他们两个的区别就是在于我们是按照sql数据库执行顺序来的,比如:sql数据库的写法方式就是select row from 查询的表,而表达式的写法就是 from 查询的表 select row。下面我们来看一下:
- 简单的Linq查询:
Linq的表达式:var db=from 自定义的表名 in Model对象.查询的表
var db=from 自定义的表名 in Model对象.查询的表
Select 自定义的表名;
var db= from 自定义的表名 in Model对象.查询的表
Select new {自定义的表名.字段};
var db= from 自定义的表名 in Model对象.查询的表
Select new 类名{类的属性=自定义的表名.字段};
Lambda表达式:
var 自定义的表名= Model对象.查询的表.Select(n=>new {ID=n.字段}).ToList();
2.where筛选条件的Linq查询:
Linq的表达式:var db = from 自定义的表名 in Model对象.查询的表
where 自定义的表名.字段1 关系运算符 值
select 自定义的表名;
Lambda表达式:
var 自定义的表名 = Model对象.查询的表.Where(n => n.字段 关系运算符 值);
Linq的表达式:var db = from 自定义的表名 in Model对象.查询的表
where 自定义的表名.字段1 关系运算符 值
select new {自定义的表名.字段};
Lambda表达式:var 自定义的表名= Model对象.查询的表.Where(n => n.字段 关系运算符 值).Select(n=>new {自定义的表名.字段}).ToList();
3.排序orderby descending(正序)/ascending (倒序)
Linq的表达式:
var db = (from 自定义的表名 in Model对象.查询的表
where 自定义的表名.字段1 关系运算符 值
orderby自定义的表名.字段1 descending //倒序
// orderby自定义的表名.字段1 ascending //正序
select自定义的表名).ToList();
Lambda表达式:
Lambda表达式的正序:var 自定义的表名 = Model对象.查询的表.OrderBy(n =>n.字段).Where(n => n.字段 关系运算符 值).ToList();
Lambda表达式的倒序:var 自定义的表名 = Model对象.查询的表.OrderByDescending(n => n.字段).Where(n => n.字段 关系运算符 值).ToList();
4.连接查询:
Linq的表达式:
var db = (from 自定义的表名 in Model对象.查询的表
join tb in Model对象.查询的表 on 自定义的表名.字段1 equals tb.字段1
orderby 自定义的表名.字段1 descending
select 自定义的表名).ToList();
Lambda表达式:
var 自定义的表名 = Model对象.查询的表.Join(Model对象.查询的表, n => n.字段, m => m.字段1, (n, m) => n).OrderByDescending(n => n.字段).ToList();
5. 分页数据查询
1.Skip() 跳过前面多少条数据取余下的数据,不过要记住在Skip前面一定要使用排序orderby descending(正序)/ascending(倒序)。Skip和 Take使用前必须要使用orderby descending(正序)/ascending(倒序)
Linq的表达式:
var db=(from 自定义的表名 in Model对象.查询的表
orderby 自定义的表名.字段 descending
select 自定义的表名).Skip(10);//跳过前10条数据。取前10条数据之后的数据
Lambda表达式:
var 自定义的表名= Model对象.查询的表.OrderByDescending(n => n.字段).Skip(10).ToList();
2.Take(n)数据从开始获取,获取指定n数量的连续数据。Take跟Skip一样,在使用前必须要使用orderby descending(正序)/ascending(倒序)
Linq的表达式:
var db=(from 自定义的表名 in Model对象.查询的表
orderby 自定义的表名.字段 descending
select 自定义的表名).Skip(10)
.Take(20)//取第11条数据到第30条数据
Lambda表达式:
var自定义的表名 = Model对象查询的表.OrderByDescending(n=>n.字段)
.Skip(10).Take(20).ToList();
6.Linq in查询
Linq的表达式:
var自定义的表名 = from 自定义的表名 in Model对象查询的表
where 自定义的表名.字段.Contains(value)
select自定义的表名;
Lambda表达式:
var自定义的表名= Model对象查询的表.Where(n=> n. 字段.Contains(value)).ToList();