gpt4 book ai didi

c# - 如何在 Linq 中进行完全外部连接?

转载 作者:IT王子 更新时间:2023-10-29 04:02:19 25 4
gpt4 key购买 nike

我继承了一个未完全优化设计的数据库,我需要处理一些数据。让我对我必须做的事情做一个更常见的类比:

假设我们有一个Student 表,一个StudentClass 表记录了他参加的所有类(class),还有一个StudentTeacher 表存储所有教过这个学生的老师。是的,我知道这是一个愚蠢的设计,将教师存储在 Class 表上更有意义 - 但这就是我们正在使用的。

我现在想清理数据,我想找到一个学生有老师但没有类(class),或者有类(class)但没有老师的所有地方。因此 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 };

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

关于c# - 如何在 Linq 中进行完全外部连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2085422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com