使用 Entity Framework Core 2.1 和 SQLite 数据库,如果在另一个 Join 之后使用 LINQ GroupJoin,我会得到不同的行为。目前尚不清楚这是一个错误还是我忽略了某些内容。
我创建了一个最小的 VS2017 项目来重现此内容,可以在此处找到:
https://gitlab.com/haddoncd/EntityFrameworkGroupJoinIssue
在此示例中,我为 Blog 表中的每一行获取一个对象,每行包含多个 PostTitles:
db.Blogs
.GroupJoin(
db.Posts,
s => s.BlogId,
p => p.BlogId,
(s, ps) => new
{
s.BlogId,
s.BlogTitle,
PostTitles = ps.Select(p => p.PostTitle),
}
)
.OrderBy(x => x.BlogId))
但在这个例子中,结果是“扁平化的”——我为每个 Blog-Post 对获得一个对象,就像从传统的 SQL 外连接中获得的一样:
db.Subscriptions
.Join(
db.Blogs,
s => s.BlogId,
b => b.BlogId,
(s, b) => new
{
s.SubscriptionId,
b.BlogId,
b.BlogTitle,
}
)
.GroupJoin(
db.Posts,
x => x.BlogId,
p => p.BlogId,
(x, ps) => new
{
x.SubscriptionId,
x.BlogTitle,
PostTitles = ps.Select(p => p.PostTitle),
}
)
.OrderBy(x => x.SubscriptionId))