Part3-31:EF Core执行实体相关查询原生SQL语句>>通过FromSqlInterpolated
一、视频来源
Part3-31:EF Core执行实体相关查询原生SQL语句_哔哩哔哩_bilibili
二、实体相关SQL查询
1、如果要执行的原生SQL是一个查询(SELETE)语句,并且查询的结果也能对应一个实体,就可以调用对应实体的DbSet的
FromSqllnterpolated()方法来执行一个查询SQL语句,同样 使用字符串内插来传递参数。
2、FromSqlInterpolated也不是立即执行(延迟执行),是在foreach时才执行,详见Part3-25:EF Core IQueryable的延迟执行。FromSqlInterpolated返回类型是IQueryable<TEntity>。
3、代码及数据
本例中Movie在数据库中的数据

数据查询结果
.OrderBy(a=> Guid.NewGuid())
int year = 2000;
ImportExcelMvctestContext db = new ImportExcelMvctestContext();
IQueryable<Movie> moives =
db.Movies.FromSqlInterpolated(@$"select * from Movie
where DatePart(year,ReleaseDate)>{year}
order by newid()");
foreach (var m in moives)
{
Console.WriteLine(m.Id + " " + m.Title + " " + m.ReleaseDate);
}
打印结果:本例中Movie表中只有一条记录的ReleaseDate年份大于2020

查看控制台日志,观察生成的SQL语句

三、好用的IQUERYABLE
1、FromSqlInterpolated()方法的返回值是IQueryable类型的,因此 我们可以在实际执行IQueryable之前,对IQueryable进行进一步的处理。例子如下:
- 代码
int year = 1900;
ImportExcelMvctestContext db = new ImportExcelMvctestContext();
IQueryable<Movie> moives =
db.Movies.FromSqlInterpolated(@$"select * from Movie
where DatePart(year,ReleaseDate)>{year}
");
int c = moives.Count();
Console.WriteLine("查询结果有:"+ c +"条");
foreach (Movie m in moives.Skip(2).Take(2))
{
Console.WriteLine(m.Id + " " + m.Title + " " + m.ReleaseDate);
}

2、把只能用原生SQL语句写的逻辑用FromSqlInterpolated()去执行,然后把分页、分组、二次过滤、排序、Include等其他逻辑尽可能仍然使用EFCore的标准操作去实现。
四、局限性
- SQL查询必须返回实体类型对应数据库表的所有列;
- 结果集中的列名必须与属性映射到的列名称匹配。
- 只能单表查询,不能使用Join语句进行关联查询。但是可以在查询后面使用Include()来进行关联数据的获取。
作者:Lyon_Yao
链接:https://www.jianshu.com/p/4518cf558db3
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
标签:
efcore
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)