如何在 Linq 中进行完全外连接?

2023-12-19

我继承了一个设计不完全优化的数据库,并且我需要操作一些数据。让我对我必须做的事情给出一个更常见的类比:

假设我们有一个Student桌子,一个StudentClass记录他参加的所有课程的表格,以及StudentTeacher表存储了所有教过该学生的老师。是的,我知道这是一个愚蠢的设计,将教师存储在班级表上会更有意义 - 但这就是我们正在研究的。

我现在想要清理数据,我想找到所有学生有老师但没有班级,或者有班级但没有老师的地方。 SQL 如下:

select *
from StudentClass sc
full outer join StudentTeacher st on st.StudentID = sc.StudentID
where st.id is null or sc.id is null

在 Linq 中如何做到这一点?


我想我在这里得到了答案,它并不像我希望的那么优雅,但它应该可以解决问题:

var studentIDs = StudentClasses.Select(sc => sc.StudentID)
  .Union(StudentTeachers.Select(st => st.StudentID);
  //.Distinct(); -- Distinct not necessary after Union
var q =
  from id in studentIDs
  join sc in StudentClasses on id equals sc.StudentID into jsc
  from sc in jsc.DefaultIfEmpty()
  join st in StudentTeachers on id equals st.StudentID into jst
  from st in jst.DefaultIfEmpty()
  where st == null ^ sc == null
  select new { sc, st };

您可能可以将这两个语句压缩为一个,但我认为您会牺牲代码的清晰度。

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

如何在 Linq 中进行完全外连接? 的相关文章

随机推荐

  • Angular UI-Router 多个视图

    我正在使用有角度的 UI 路由器 我的路线配置中有以下内容 config function config stateProvider stateProvider state newsFeedView url newsFeed control
  • 使用 UINavigationBar 和 UIBarButtonItem 自动布局

    我喜欢将视图创建为独立的 Xib 文件 然后实例化它们并添加为子视图 所以 当与一个UINavigationBar 我希望能够做同样的事情 首先从 Xib 创建我的自定义视图 然后将其作为自定义视图添加到UIBarButtonItem UI
  • 如何在 Django Admin 中使用“list_display”显示多对多字段?

    class Product models Model products models CharField max length 256 def unicode self return self products class Purchase
  • 将 opencover xml 输出转换为 ncover xml

    我需要能够将 opencover 覆盖率结果导入 Jenkins 以随时间推移提取覆盖率趋势数据 看来 最好的方法是找到一种方法将 opencover xml 格式转换为 ncover 格式 然后使用 NCover 插件导入结果 是否有现有
  • 将未绑定的形式转换为绑定的形式?

    我想要一个对象的绑定形式来使用 is valid 方法 原因是因为我有一些旧数据 我希望用户根据新的验证规则进行更正 然后 我想在我的表单中重用干净方法的代码 我最终序列化了我的回复 from django utils import sim
  • 使用新文档支持 API 进行 iOS 应用程序到应用程序的数据传输

    Problem Building Enterprise Applications of a Suite Nature and need to be able to pass data from one application to anot
  • mingw32-make是否改名为make?

    我安装了最新的mingw 发现已经没有mingw32 make了 有make exe 所以我想知道最近是否将mingw32 make重命名为make exe 我不知道你从哪里得到 MinGW 但一些发行版 比如 nuwen 的 命名了它ma
  • 如何将jar上传到存储库?

    我的 jar 文件在 Maven 中央存储库中找不到 我想添加罐子 这样我就可以在我的pom xml文件和其他开发人员可以使用该 jar 将 jar 上传到 http web 服务器 web 文件夹需要执行哪些步骤 我还应该上传什么文件cu
  • Grails在tomcat下爆炸

    有没有一种方法可以在 tomcat 上以 爆炸 模式使用 Grails 以便在正在运行的应用程序 如 gif 中进行单独更改 而无需重新生成整个 war 并上传它 比如在 tomcat 的conf Catalina localhost 中添
  • 如何从 C# 字符串中获取以 null 结尾的字符串?

    我正在与需要空终止字符串的服务器通信 我怎样才能做到这一点smartly in C 我认为聪明的方法就是简单地做 string str An example string char MinValue Add null terminator
  • 在 HttpClient 中打开日志记录

    如何正确打开 Apache Commons HttpClient 的日志记录 现在我正在这样做 除了我作为测试明确触发的消息之外 没有收到任何日志消息 public class HttpTest1 static Log log LogFac
  • 将 Scala 文件加载到解释器中以使用函数?

    我在文件中而不是在类中定义了一些 Scala 函数 并且我想在 Scala 解释器中使用它们 我知道我可以说scala filename scala只需运行该文件并退出解释器 但我想运行该文件 然后留在解释器中 以便我可以进行一些测试 谁能
  • 使用 markdown 创建 元素 (kramdown)

    是否可以使用 markdown 创建一个 span 元素 我正在使用 Kramdown 转换器 Thanks 根据Markdown 语法规范 文档 http daringfireball net projects markdown synt
  • 将 scala.math.BigDecimal 转换为 java.math.BigDecimal?

    我如何转换scala math BigDecimal to java math BigDecimal 无需与字符串进行双重转换 val sb scala math BigDecimal 12345 val jb sb bigDecimal
  • 在数据表的分页控件中显示不带省略号的页面

    我正在使用 jQuery Datatables JS 和 Bootstrap 我遇到了一个问题 有一个解决方法 但它不是最好的 问题 我的表包含超过 4k 条记录 如果处理表的人需要从记录 200 到 300 进行处理 并且为了方便起见 他
  • PHP - 从数据库构建多级关联数组(从数据库按州对城市进行排序)

    我对 php 有点陌生 在过去的几个小时里我一直在绞尽脑汁试图弄清楚这一点 我需要从数据库中按州对城市进行排序 我使用以下查询来检索数据集 SELECT state city FROM table ORDER BY state ASC ci
  • 如何克隆道具对象并使其不反应[重复]

    这个问题在这里已经有答案了 我有一些表单数据 我通过道具与子组件共享 现在我想克隆 prop 对象并使其不响应 就我而言 我希望用户能够修改 props 值 而无需实际更改克隆值 克隆值应该仅用于向用户显示编辑时的表单内容 下面的代码显示了
  • Swift:.classForCoder() 的替代方案

    给出以下代码 return TyphoonDefinition withClass AppDelegate classForCoder definition in definition injectProperty assembly 有必要
  • 内核sys_call_table地址与system.map中指定的地址不匹配

    我正在尝试温习 C 所以我一直在研究 Linux 内核的系统调用表 在 3 13 0 32 generic 上 我在网上找到了一个资源 它使用以下函数搜索系统调用表 并将其加载到 LKM 中的内核中 static uint64 t aqui
  • 如何在 Linq 中进行完全外连接?

    我继承了一个设计不完全优化的数据库 并且我需要操作一些数据 让我对我必须做的事情给出一个更常见的类比 假设我们有一个Student桌子 一个StudentClass记录他参加的所有课程的表格 以及StudentTeacher表存储了所有教过