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系列教程汇总

posted @   捞月亮的猴子  阅读(9046)  评论(2编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示