带计数的 EF Core 左连接

2024-04-23

我在 MySql 数据库上有 3 个表。我想在这 3 个表之间进行左连接并使用 group by 进行计数。

城市表
Id
Name

学校桌
Id
CityId
Name

学生桌
Id
SchoolId
Name

/* MySql raw query like this: */
select Count(tstudent.id) as StudentCount, tcity.Id, tcity.Name
from City tcity
left join School tschool on tcity.Id = tschool.CityId
left join Student tstudent on tschool.Id = tstudent.SchoolId
group by tcity.Id;

使用 EF Core 我尝试这样:

class CityWithStudentCount {
    public int Id { get;set; }
    public string CityName { get;set; }
    public int StudentCount { get;set; }
}

EF核心:

var db = new MyDbContext();

var result = (from city in db.City
             join school in db.School on city.Id equals school.CityId into tcity
             from r1 in tcity.DefaultIfEmpty()

             join student in db.Student on school.Id equals student.SchoolId into tschool
             from r2 in tschool.DefaultIfEmpty()
             
             select new CityWithStudentCount
             {
                 Id = city.Id,
                 CityName = city.Name,
                 StudentCount = tschool.count()
             } into s1
             
             group s1 by s1.Id)
             .Select(s=>s.ToList())
             .ToList();

结果一定是这样的:

1 City1 10
2 City2 3
3 City3 0
4 City4 0
5 City5 12

我该如何使用 Entity Framework Core 来查询此结果。谢谢。


你的查询是错误的。

 var result = (from city in db.City
         join school in db.School on city.Id equals school.CityId into t1
         from school in t1.DefaultIfEmpty()

         join student in db.Student on school.Id equals student.SchoolId into t2
         from student in t2.DefaultIfEmpty()

         group student by new { city.Id,city.Name } into cityGrouped
         select new CityWithStudentCount
         {
             Id = cityGrouped.Key.Id,
             CityName = cityGrouped.Key.Name,
             StudentCount = cityGrouped.Count(x => x.student != null)
         }
         .ToList();

另外,我强烈建议您使用导航属性而不是手动构建连接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带计数的 EF Core 左连接 的相关文章

随机推荐

  • “流不包含有效的 UTF-8”是什么意思?

    我正在创建一个简单的 HTTP 服务器 我需要读取请求的图像并将其发送到浏览器 我正在使用这段代码 fn read file mut file name String gt String file name file name replac
  • 这个使用 的简单 C++ 程序正确吗?

    这段代码似乎在 gcc 和 clang 的 ubuntu 可信 版本中工作正常 并且通过 mingw 在 VM 上的 Win 7 中工作正常 最近我升级到 Wily 并使用 clang 构建的版本始终崩溃 include
  • 使用 bootstrap 更改表标题颜色

    我有一个使用引导程序的 MVC5 应用程序 表列名称为黑色 在白色背景上 我想将其更改为蓝色背景和列 名字将是白色的 我该怎么做 我尝试使用 CSS 类但没有成功
  • 安装 rpy2 时 Visual Studio cl.exe 错误

    我在 Django 中安装 rpy2 并收到以下错误 C Program Files x86 Microsoft Visual Studio 2017 Enterprise VC Tools MSVC 14 15 26726 bin Hos
  • Django 是否有立即 http 响应的异常?

    Django Tastypie 有ImmediateHttpResponse允许立即向客户端返回响应的异常 raise ImmediateHttpResponse response a message 姜戈有Http404 https do
  • 如何读取长度未知的输入字符串?

    如果我不知道这个词有多长 我就无法写char m 6 这个词的长度可能有十到二十长 我该如何使用scanf从键盘获取输入 include
  • Postgres 物化路径 - 使用 ltree 有什么好处?

    物化路径是一种在 SQL 中表示层次结构的方法 每个节点包含路径本身及其所有祖先 grandparent parent self The django treebeard实施MP docs https django treebeard re
  • 如何在 angularjs 单元测试中触发 keyup/keydown 事件?

    我想对模拟占位符的指令进行单元测试 其中输入值仅在 keyup down 事件上清除 您需要以编程方式创建一个事件并触发它 为此 使用 jQuery 进行单元测试是非常有用的 例如 您可以编写一个像这样的简单实用程序 var trigger
  • Drive Rest API V3 中的断点续传上传

    我正在尝试使用 Android 中的 Drive Rest API 创建可恢复上传会话 根据文档 需要遵循的 3 个步骤是 启动可恢复会话 保存可恢复会话 URI 上传文件 第 1 步 我使用以下代码来启动可恢复会话 File body n
  • 如何获取十六进制02的STX字符

    我有一个设备试图通过套接字连接 根据手册 我需要 十六进制 02 的 STX 字符 我如何使用 C 来做到这一点 只是对 GeoffM 的答案的评论 我没有足够的观点来以正确的方式发表评论 您绝对不应该仅使用两位数字来嵌入 STX 或其他字
  • windows 7下如何强制删除硬盘上的文件

    我有一个硬盘 但里面有一个坏文件 当我想删除文件时 窗口说 您指定的文件名无效或太长 指定不同的文件名 但文件没有重命名 我该怎么办 当正在运行的进程拥有资源句柄时 您无法修改该资源 解决方案是结束所有拥有您的资源句柄的进程 如下所示 1
  • Ant Design Collapse - 关闭按钮

    我是 Ant Design 的初学者 在使用 Ant Design 库中的 Collapse 和 Form 时遇到了这个问题 我已经设置了我的页面 其中添加新项目的表单位于折叠中 并且折叠下方有一个项目列表
  • 在ios中使用Google Plus进行图像共享

    我想在 google plus 上分享图片 我使用过 google api AppDelegate m GPPSignIn sharedInstance clientID MyClientID GPPDeepLink setDelegate
  • 重命名access vba中的字段

    我需要重命名 VBA 访问代码中的字段名称以实现自动化 以便运行得更快 我正在使用一个按钮来移动一些数据 因此需要更改列名称来清理数据 我正在使用表格 但我需要更改的表格根本没有链接到表格 我尝试使用一些 VBA 代码 但不断收到变量未定义
  • 需要在Windows Phone 7屏幕上显示大量文字

    我想要在屏幕上显示大约 800 KB 的文本 有人可以让我知道这个问题的可能解决方案吗 由于文本块的 2048X2048 限制 我已经尝试将文本拆分为多个文本块 并且也尝试过http blogs msdn com b priozersk a
  • 在 FFI 中使用 ptr::NonNull 是否有效?

    铁锈具有ptr NonNull https doc rust lang org beta std ptr struct NonNull html代表非的类型NULL指针 在 FFI 中使用这种类型安全吗 是否保证具有相同的二进制表示形式 忽
  • 捕获文件似乎在数据包中间被缩短 - 如何防止此错误?

    在我的应用程序中 我打开 Tshark 进程并开始捕获 当我想完成捕获时 我会终止 Tshark 进程 因此有时捕获文件已损坏 当我尝试打开此文件时 我收到错误捕获文件似乎在数据包中间被剪短 如何防止此错误有没有更好的方法来关闭 Tshar
  • 来自 .meta .info .data 的 Tensorflow 冻结推理图并组合冻结推理图

    我是张量流新手 目前正在努力解决一些问题 如何在没有管道配置的情况下从 meta data info 获取冻结推理图 我想实时检查预先训练的交通标志检测模型 模型包含 3 个文件 meta data info 但我找不到信息 如何在没有管道
  • 为什么在 Pandas 中使用 apply 时会出现额外的索引

    当我使用apply对于 Pandas 中的用户定义函数 看起来 python 正在创建一个附加数组 我怎样才能摆脱它呢 这是我的代码 def fnc group x group C values out x np where x lt 0
  • 带计数的 EF Core 左连接

    我在 MySql 数据库上有 3 个表 我想在这 3 个表之间进行左连接并使用 group by 进行计数 城市表 Id Name 学校桌 Id CityId Name 学生桌 Id SchoolId Name MySql raw quer