tnblog
首页
视频
资源
登录
什么时候才能领悟,取之越多失之越多
排名
5
文章
229
粉丝
15
评论
7
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

ef 三表join,三表left join

10139人阅读 2019/10/21 9:38 总访问:1165802 评论:0 收藏:0 手机
分类: .NET


EF三表join:

sql写法:

  1. //sql
  2. List<UserScoreViewModel3> ulist = oae.Database.SqlQuery<UserScoreViewModel3>(@"
  3.                     select u.username,p.father,s.sub,s.score from dbo.Users u
  4.                     join dbo.User_Parent p on u.id = p.usersid
  5.                     oin dbo.Score s on u.id = s.usersid ").ToList();

linq写法:

  1. //linq
  2. var query = from u in oae.Users
  3.             join p in oae.User_Parent on u.Id equals p.UsersId
  4.             join s in oae.Score on u.Id equals s.UsersId
  5.             select new
  6.             {
  7.                 username = u.UserName,
  8.                 father = p.Father,
  9.                 sub = s.Sub,
  10.                 score = s.Score1
  11.             };
  12. var result = query.ToList();

lamdba写法:

  1. //lamdba
  2. var query = oae.Users.Join(oae.User_Parent, a => a.Id, b => b.UsersId, (a, b) => new
  3. {
  4.     user = a,
  5.     parent = b
  6. }).Join(oae.Score, a => a.user.Id, b => b.UsersId, (a, b) => new
  7. {
  8.     username = a.user.UserName,
  9.     father = a.parent.Father,
  10.     sub = b.Sub,
  11.     score = b.Score1
  12. });
  13. var result = query.ToList();


EF三表left join:

linq写法:

  1. var query = from u in oae.Users
  2.             join p in oae.User_Parent on u.Id equals p.UsersId into jointemp
  3.             from leftjoin in jointemp.DefaultIfEmpty()
  4.             join s in oae.Score on u.Id equals s.UsersId into sjointemp
  5.             from sleftjoin in sjointemp.DefaultIfEmpty()
  6.             select new
  7.             {
  8.                 username = u.UserName,
  9.                 father = leftjoin.Father,
  10.                 sub = sleftjoin.Sub,
  11.                 score = sleftjoin.Score1
  12.             };
  13. var result = query.ToList();

lamdba写法1:

  1. //三表 left join lamdba
  2. var result2 = oae.Users.GroupJoin(oae.User_Parent, a => a.Id, b => b.UsersId, (a, b) => new
  3. {
  4.     uid = a.Id,
  5.     username = a.UserName,
  6.     parents = b
  7. }).SelectMany(a => a.parents.DefaultIfEmpty(), (a, b) => new
  8. {
  9.     uid = a.uid,
  10.     username = a.username,
  11.     father = b.Father
  12. }).GroupJoin(oae.Score, a => a.uid, b => b.UsersId, (a, b) => new
  13. {
  14.     username = a.username,
  15.     father = a.father,
  16.     scores = b
  17. }).SelectMany(a => a.scores.DefaultIfEmpty(), (a, b) => new
  18. {
  19.     username = a.username,
  20.     father = a.father,
  21.     sub = b.Sub,
  22.     score = b.Score1
  23. }).ToList();

lamdba写法2:

  1. //三表 left join lamdba写法2
  2. var result3 = oae.Users.GroupJoin(oae.User_Parent, a => a.Id, b => b.UsersId, (a, b) => new
  3. {
  4.     uid = a.Id,
  5.     UserName = a.UserName,
  6.     parents = b
  7. }).GroupJoin(oae.Score, a => a.uid, b => b.UsersId, (a, b) => new
  8. {
  9.     UserName = a.UserName,
  10.     parents = a.parents,
  11.     scores = b
  12. }).SelectMany(a => a.scores.DefaultIfEmpty(), (a, b) => new
  13. {
  14.     UserName = a.UserName,
  15.     parents = a.parents,
  16.     sub = b.Sub,
  17.     score = b.Score1
  18. }).SelectMany(a => a.parents.DefaultIfEmpty(), (a, b) => new
  19. {
  20.     UserName = a.UserName,
  21.     sub = a.sub,
  22.     score = a.score,
  23.     father = b.Father
  24. });
  25. var resultList = result3.ToList();




欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

NET Core 使用 ef Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

C out、ref关键字的用法和区别

说说自己对out、ref的认识,面试问到的几率很高哟。out:classProgram { /* *out、ref都是引用传递,传递后使用都会改变...

Net Core使用ef之DB First

一.新建一个.net core的MVC项目新建好项目后,不能像以前一样直接在新建项中添加ef了,需要用命令在添加ef的依赖二.使用Nug...

ef6动态添加条件

例如我们要匹配一个集合中的所有关键字,我们首先想到的做法是这样的publicList&lt;Article&gt;GetArtByKeys(List&lt;strin...

Net Core使用依赖注入来装载ef的上下文对象

妹子情人节快乐~.net core中用了不少的依赖注入,官方文档中也推荐使用。这样使用依赖注入来管理ef对象,还是比较科学,比如...

NET CORE配置ef连接字符串。windows验证的连接字符串配置

在appsettings.json中配置好连接字符串{&quot;ConnectionStrings&quot;:{ &quot;BloggingDatabase&quot;:&quot;Server=(lo...

使用Refit框架访问REST接口

改装是一个类型安全的REST开源库,是一套基于RESTful架构的.NET客户端实现,内部使用HttpClient类封装,可通过改装更加简单...

docker启动报错 No default Boot2Docker ISO found locally downloading the latest

这是因为,启动时如果检测到没有 Boot2Docker,就会去下载,这个下载过程出现网络连接上的错误了,导致启动失败。可以去下...

扩展ef自动映射需要查询的字段(表达式树Expression),动态构建返回值

Entity Framework 动态构造select表达式比如我们需要返回某些字段会采用如下的写法但是发现每次都去写select如果字段很多不...

layer弹窗+ef引入独立页面进行操作

使用layer弹窗进行操作的时候我们可以使用type=2,来把一个独立的页面指向content内容例如我们有一个表格,点击添加后,我...

Entity Framework常用查询,ef joinef多表联查,原生sql。ef 多表查询。AsNoTracking

直接执行sql语句//全表查询 List&lt;Users&gt;ulist=se.Database.SqlQuery&lt;Users&gt;(&quot;select*fromusers&quot;).T...

ef Code First常用命令

Enable-Migrations启用数据库迁移Enable-Migrations –EnableAutomaticMigrations 启动自动迁移Add-Migration Name(名字可...

ef Code First 多对多关系配置

Code First配置多对多关系,常规有两种方法例如我们有一张学生表,和一张课程表,学生和课程是一个多对多的关系方法1:单纯...

解决:基础提供程序在 Open 上失败,ef无法生成实体问题

在学校图书馆的电脑上安装VS2013和SQL R2后,调试项目报错:基础提供程序在 Open 上失败怀疑是数据库的问题,然后删除数据...

net core过滤器。net core过滤器中获取依赖注入对象。net core过滤器中使用依赖注入。Servicefilter 

虽然对象都可以直接实例化得到。但是所有的对象依赖关系,都用DI容器去管理,这样后面想要更换对象的时候也非常方便,项目...

ef状态System.Data.EntityState的一点理解

System.Data.EntityState一共有五种状态分别是Added,Deleted,Modified,UnChanged,Detached下面给一个简单的解释System.Data...
不幸的是我们等了那么多年,幸运的我们那么多年过去还一直在一起