Entity Framework入门教程(7)--- EF中的查询方法
这里主要介绍两种查询方法 Linq to entity(L2E)和Sql
1、L2E查询
L2E查询时可以使用linq query语法,或者lambda表达式,默认返回的类型是IQueryable,(linq查询默认返回的是IEnumerable),下边给出了一个简单的例子
//查询名字为ls的用户集合 //query语法 var users = from u in context.UserInfo where u.UserName == "ls" select u; //method语法 var users2 = context.UserInfo.Where<UserInfo>(user => user.UserName == "ls");
linq的使用方法详见linq总结系列(一)---基础部分,其中的CRUD操作都是使用linq的语法,这里就不多啰嗦了~
2、原生Sql查询和操作
1.DbSet.SqlQuery()
返回的结果是DbSqlQuery类型,该类型实现了IEnumberable接口,所以结果集也可以用linq操作
//查询名字为ls,密码是123321的用户集 //使用占位符,执行的时候自动生成sql参数,不用担心sql注入 var user1 = context.UserInfo.SqlQuery("select * from userinfo where username=@p0 and userpass=@p1", "ls", "123"); //自己设sql参数 SqlParameter [] pars= { new SqlParameter("@name", SqlDbType.NVarChar, 20) { Value = "ls" }, new SqlParameter("@pass", SqlDbType.NVarChar, 20) { Value="123"} }; var user2 = context.Database.SqlQuery<UserInfo>( "select * from userinfo where username=@name and userpass=@pass", pars); //查询用户人数 int count = context.Database.SqlQuery<int>("select count(*) from userinfo").SingleOrDefault();
2.Database.SqlQuery()
context.Database对应着底层数据库,Database.SqlQuery用于查询,可以返回任意类型。
using (var ctx = new SchoolDBEntities()) { //获取ID为1的student的名字 string studentName = ctx.Database.SqlQuery<string>("Select studentname from Student where studentid=@id", new SqlParameter("@id", 1)) .FirstOrDefault(); }
3.Database.ExecuteSqlCommand()
Database.ExecuteSqlCommand()用于通过Sql进行CUD操作,返回int类型(受影响的行数)
using (var ctx = new SchoolDBEntities()) { //修改 int noOfRowUpdated = ctx.Database.ExecuteSqlCommand("Update student set studentname ='changed student by command' where studentid=@id", new SqlParameter("@id", 1)); //添加 int noOfRowInserted = ctx.Database.ExecuteSqlCommand("insert into student(studentname) values('New Student')"); //删除 int noOfRowDeleted = ctx.Database.ExecuteSqlCommand("delete from student where studentid=@id",new SqlParameter("@id", 1));
}
EF系列目录链接:Entity Franmework系列教程汇总