前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL语句在EFCore中的简单映射

SQL语句在EFCore中的简单映射

原创
作者头像
哇侠转转
发布2024-08-27 15:03:12
920
发布2024-08-27 15:03:12
举报
文章被收录于专栏:Asp.Net Web开发

在Entity Framework Core (EF Core)中,许多SQL语句的功能可以通过LINQ(Language Integrated Query)查询或EF Core特定的方法来实现。虽然EF Core并不直接映射SQL函数到C#函数,但它提供了丰富的API来执行类似SQL中的操作,如聚合、筛选、排序、连接等。下面是一些常用SQL操作及其在EF Core中的对应实现方式:

SQL操作

EF Core实现

示例

SELECT

LINQ查询

var result = context.Blogs.Select(b => new { b.Id, b.Name }).ToList();

WHERE

LINQ Where

var filtered = context.Blogs.Where(b => b.IsActive).ToList();

ORDER BY

LINQ OrderBy/ThenBy

var ordered = context.Blogs.OrderBy(b => b.Name).ThenBy(b => b.Id).ToList();

GROUP BY

LINQ GroupBy

var grouped = context.Blogs.GroupBy(b => b.Category).Select(g => new { Category = g.Key, Count = g.Count() }).ToList();

HAVING

LINQ Where after GroupBy

var filteredGroups = context.Blogs.GroupBy(b => b.Category).Where(g => g.Count() > 1).Select(g => new { Category = g.Key, Count = g.Count() }).ToList();

JOIN

LINQ Join/GroupJoin

var joined = context.Blogs.Join(context.Posts, b => b.BlogId, p => p.BlogId, (b, p) => new { Blog = b, Post = p }).ToList();

LEFT JOIN

LINQ GroupJoin + DefaultIfEmpty

var leftJoined = context.Blogs.GroupJoin(context.Posts, b => b.BlogId, p => p.BlogId, (b, posts) => new { Blog = b, Posts = posts.DefaultIfEmpty() }).SelectMany(x => x.Posts, (b, p) => new { Blog = b.Blog, Post = p }).ToList();

INSERT

DbSet.Add/AddRange

context.Blogs.Add(new Blog { Name = "New Blog" }); context.SaveChanges();

UPDATE

修改实体后SaveChanges

var blog = context.Blogs.Find(1); blog.Name = "Updated Blog"; context.SaveChanges();

DELETE

DbSet.Remove/RemoveRange

var blog = context.Blogs.Find(1); context.Blogs.Remove(blog); context.SaveChanges();

AGGREGATE FUNCTIONS (如 COUNT, MAX, MIN, SUM, AVG)

LINQ Aggregate Functions

var count = context.Blogs.Count(); var maxId = context.Blogs.Max(b => b.Id);

上述示例中的contextDbContext的实例,它是EF Core中用于与数据库交互的主要类。在实际应用中,用户需要根据自己的数据库上下文类名来替换context

对于更复杂的SQL函数,如字符串处理函数、日期时间函数等,EF Core通常不直接提供与SQL函数一一对应的C#函数。但是EF Core 7.0及更高版本引入了EF.Functions类,它提供了一些数据库函数的直接访问,如字符串函数、日期时间函数等。但请注意,这些函数的可用性取决于底层数据库提供程序的支持。

对于EF Core无法直接翻译或处理的复杂SQL查询,可以使用FromSqlRawFromSqlInterpolated方法执行原始SQL查询,并将结果映射到实体或DTO(数据传输对象)上。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档