List<Student> list=db.Queryable<Student>().ToList() //select * from Student
int count=db.Queryable<Student>().Count() //select count(1) from Student
db.Queryable<Student>().Where(it=>it.Id==1).ToList() //select * from Student where id=1 db.Queryable<Student>().Where(it=>it.name !=null).ToList()//不是null //select * from Student where name is not null db.Queryable<Student>().Where(it=>it.name ==null).ToList()//是null //select * from Student where name is null db.Queryable<Student>().Where(it=>it.name !="").ToList()//不是空 ,不为空 //select * from Student where name <> ''
db.Queryable<Student>().Where(it=>it.Id>10&&it.Name=="a").ToList() //select * from Student where id>10 and name='a' db.Queryable<Student>().Where(it=>it.Id>10).Where(it=>it.Name=="a").ToList() //select * from Student where id>10 and name='a' //如果是或者关系可以用 ||
var exp= Expressionable.Create<Student>(); exp.OrIF(条件,it=>it.Id==1);//.OrIf 是条件成立才会拼接OR exp.Or(it =>it.Name.Contains("jack"));//拼接OR var list=db.Queryable<Student>().Where(exp.ToExpression()).ToList();
db.Queryable<Student>().Where(it =>it.Name.Contains("jack")).ToList(); //select * from Student where name like %jack%
susgar中的single等同于EF中的SingleOrDefault
/*单主键查询*/ db.Queryable<Student>().InSingle(2) //通过主键查询 SingleById db.Queryable<Student>().Single(it=>it.Id==2) //根据ID查询 //select * from Student where id=2 /*多主键查询*/ var getAll=db.Queryable<Order>().WhereClassByPrimaryKey(new Order(){Pk1=1,Pk2=xx}).ToList(); //单个实体 vargetAll=db.Queryable<Order>().WhereClassByPrimaryKey(List<Order>).ToList(); //支持集合
.First() 等同于C#中的 FirstOrDefault , 没有值返回 null
db.Queryable<Student>().First(it=>it.Id==1) //没有返回Null //select top 1 * from Student where id=1
First() 等同于C#中的 FirstOrDefault , 没有值返回 null
db.Queryable<Student>() .OrderBy(it=>it.Id,OrderByType.Desc )// 倒序 .First(it=>it.Id>10) //没有返回Null //select top 1 * from Student order by id desc where id>10
db.Queryable<Student>().Take(10).ToList() //select top 10 * from Student
db.Queryable<Student>().Where(it=>it.Id>11).Count()//同步 db.Queryable<Student>().Where(it=>it.Id>11).CountAsync()//异步 //select count(*) from Student where id>11 //你也可以用函数 SqlFunc.AggregateCount
//例1:更新表名 db.Queryable<School>().AS("Student").ToList(); //生成的SQL SELECT [ID],[NAME] FROM Student //动态表名 表别名 指定表明 //例2:给表名添加前缀 db.Queryable<School>().AS("dbo.School").ToList(); //生成的SQL SELECT [ID],[NAME] FROM dbo.School //如果不用AS也可以在特性中设置别名,看文档:实体本置
is exists
db.Queryable<Student>().Where(it=>it.Id>11).Any() db.Queryable<Student>().Any(it=>it.Id>11) //上面语法的简化 //异步就是 AnyAsync()
单个字段
int [] allIds =new int[]{2,3,31}; db.Queryable<OrderItem>().Where(it => allIds.Contains(it.OrderId)).ToList() //orderid in (2,3,31) //支持超过 1000以上,只要数据库不慢没有上限 //字符串类型 varchar和nvarchar (默认varchar来保证性能) NameList.Contains(it.Name,true) //true和false来控制是varchar还是nvarchar
多个字段 (升级:5.1.4.67-preview04)
List<OrderItem> list=xxx; db.Queryable<OrderItem>().Where(it => list.Any(s => s.Id == it.Id && s.Name == it.Name)) //也可以用动态表达式拼OR实现
对象集合In like 升级:5.1.4.67
List<OrderItem> list=xxx; db.Queryable<OrderItem>().Where(it => list.Any(s => it.Name.Contanins(s.Name))) //也可以用动态表达式拼OR实现
数组集全 in like :5.1.4.85
List<string> list=xxx; db.Queryable<OrderItem>().Where(it => list.Any(s => it.Name.Contanins(s))) //也可以用动态表达式拼OR实现
int [] allIds =new int[]{2,3,31}; db.Queryable<OrderItem>().Where(it => !allIds.Contains(it.OrderId)).ToList() //orderid NOT in (2,3,31)
db.Queryable<Student>().OrderBy((st,sc)=>sc.Id,OrderByType.Desc).ToList() //排序 可以多个 //更多用法 https://www.donet5.com/Home/Doc?typeId=2312
db.Queryable<Student>().Select(it=>it.Name).ToList() //单值 查询列 查询单独列
查询一条
db.Queryable<Student>().Single(it=>it.Id==1) //没有返回Null,如果结果大于1条会抛出错误 //select * from Student where id=1 // 查询id等于1的单条记录
db.Queryable<Order>().Max(it=>it.Id);//同步 db.Queryable<Order>().MaxAsync(it=>it.Id);//异步 //也可以用函数 SqlFunc.AggregateMax
db.Queryable<Order>().Min(it=>it.Id);//同步 db.Queryable<Order>().MinAsync(it=>it.Id);//异步 //也可以用函数 SqlFunc.AggregateMin
db.Queryable<Order>().Sum(it=>it.Id);//同步 db.Queryable<Order>().SumAsync(it=>it.Id);//异步 //也可以用函数 SqlFunc.AggregateSum
db.Queryable<Order>().Avg(it=>it.Id);//同步 db.Queryable<Order>().AvgAsync(it=>it.Id);//异步 //也可以用函数 SqlFunc.AggregateAvg
生成的sql Select 不会有Files
/***单表***/ db.Queryable<Order>().IgnoreColumns(it=>it.Files).ToList();//只支持单表查询 /***联查***/ //是主表 var leftQuery=db.Queryable<Order>().IgnoreColumns(it=>it.Files); var list=db.Queryable(leftQuery).LeftJoin<OrderDetails>((o,d)=>o.id==d.orderid).Select(o=>o).ToList(); //是Join的表 var rightQuery= db.Queryable<OrderItem>().IgnoreColumns(it=>it.Files); var list=db.Queryable<Order>().LeftJoin(rightQuery,(o,d)=>o.Id == d.OrderId).Select(o=>o).ToList();
2016 © donet5.comApache Licence 2.0