我在想5-6个小时来了解GroupJoin。我正在谈论用linq查询数据库表。我明白Join和GroupJoin的作用但是我真的无法理解我将需要它。我觉得Join会做我需要的所有东西,但如果有什么可以加入'没有GroupJoin所以我觉得这种情况毫无意义或无用。
例如:
与电话和电话表相关的人员表持有人员的外键,一个人可以再拥有一个电话号码。如果我们想要携带所有有电话号码但没有电话号码的人,我们将需要GroupJOin但是我们需要这个查询的内容是什么?
使用GroupJoin可以给我充分的理由,示例或演示吗?
答案 0 :(得分:3)
来自MSDN:
在关系数据库术语中,Join实现了一个内部联接,一种联接类型,其中只返回那些在另一个数据集中具有匹配项的对象。 GroupJoin方法在关系数据库术语中没有直接等价,但它实现了内连接和左外连接的超集。
因此,如果您曾经有过在SQL中使用外连接的理由,那么您可能会在Linq中将GroupJoin用于类似目的。
答案 1 :(得分:1)
在SQL中,你会写:
SELECT *
FROM Persons p LEFT JOIN Phones ph on p.PersonID = ph.PersonID
你会得到一个行列形状,其中一些行具有空电话号码,而某些行与其他行具有相同的行。
Bob, null
Joe, 111-1111
Mike, 222-2222
Mike, 333-3333
Mike, 444-4444
在LinqToSql中,你会写:
from p in Persons
join ph in Phones on p.PersonID equals ph.PersonID into phones
select new {Person = p, Phones = phones.ToList()};
每个人可以获得一个人实例,每部手机可以获得一个手机实例,这些实例都是相关的。
Bob, [] <- (empty)
Joe, [111-1111]
Mike, [222-2222, 333-3333, 444-4444]