EF7 引入了返回标量类型的原始 SQL 查询。 这在 EF8 中得到了增强,包括返回任何可映射 CLR 类型的原始 SQL 查询,而无需在 EF 模型中包括该类型。
使用非映射类型的查询是使用 SqlQuery 或 SqlQueryRaw 执行的。 前者使用字符串内插来参数化查询,这有助于确保所有非常量值都被参数化。
var result = _dbContext.Database.SqlQuery<Blog>($"select * from {typeof(Blog).Name}").ToList(); 1
非常振奋人心的是,SqlQuery的得到的结果是一个IQueryable,也就是说,可以无缝对接Linq!
所以你可以这样,在Sql中直接写上你的条件:
var cutoffDate = new DateOnly(2022, 1, 1); var summaries = await context.Database.SqlQuery<PostSummary>( @$"SELECT b.Name AS BlogName, p.Title AS PostTitle, p.PublishedOn FROM Posts AS p INNER JOIN Blogs AS b ON p.BlogId = b.Id WHERE p.PublishedOn >= {cutoffDate}") .ToListAsync(); 12345678
或者这样,使用Sql拼接表,再用Linq进行筛选:
var summariesIn2022 = await context.Database.SqlQuery<PostSummary>( @$"SELECT b.Name AS BlogName, p.Title AS PostTitle, p.PublishedOn FROM Posts AS p INNER JOIN Blogs AS b ON p.BlogId = b.Id") .Where(p => p.PublishedOn >= cutoffDate && p.PublishedOn < end) .ToListAsync(); 1234567
到目前为止,所有查询都是直接针对表执行的。 SqlQuery 也可用于在不映射 EF 模型中的视图类型的情况下从视图返回结果。 例如:
var summariesFromView = await context.Database.SqlQuery<PostSummary>( @$"SELECT * FROM PostAndBlogSummariesView") .Where(p => p.PublishedOn >= cutoffDate && p.PublishedOn < end) .ToListAsync(); 12345
甚至是函数:
var summariesFromFunc = await context.Database.SqlQuery<PostSummary>( @$"SELECT * FROM GetPostsPublishedAfter({cutoffDate})") .Where(p => p.PublishedOn < end) .ToListAsync(); 12345
亦或者是存储过程:
var summariesFromStoredProc = await context.Database.SqlQuery<PostSummary>( @$"exec GetRecentPostSummariesProc") .ToListAsync(); 1234
相关知识
Ef Core花里胡哨系列(11) ef8 无实体查询,你好!
免费在线工具,花里胡哨且实用!可以制作圣诞节头像。。。
centos7花里胡哨之桌面美化
是时候展示一波花里胡哨了——以图搜图
JZOJ 3887. 【长郡NOIP2014模拟10.22】字符串查询
Roses double core candle wedding decorations 中文翻译英文意思,翻译英语
字符串查询算法
使用 SQL 查询编辑器进行查询
“蔬菜大王“老杨建造了一个育苗温室.温室南墙高DF=0.3m.北墙高AG=1.6m.温室下底面是长方形.长EF=8m.宽FG=3m.求温室玻璃盖ABCD的面积. 题目和参考答案——青夏教育精英家教网——
【花艺意·花店创业系列2】花艺工作室与实体鲜花店的区别?刚起步的我该如何选择?
网址: Ef Core花里胡哨系列(11) ef8 无实体查询,你好! https://m.huajiangbk.com/newsview106055.html
上一篇: 是生长在北美湿地中的神奇水果,这 |
下一篇: mysql like查询字符串 |