Используя Entity Framework Core 2.1 и базу данных SQLite, я получаю другое поведение от LINQ GroupJoin, если использую его после другого Join. Не ясно, если это ошибка или есть что-то, что я пропускаю.
Я создал минимальный проект VS2017 для воспроизведения этого, который можно найти здесь:
https://gitlab.com/haddoncd/EntityFrameworkGroupJoinIssue
В этом примере я получаю по одному объекту для каждой строки в таблице блога, каждая из которых содержит несколько заголовков 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))
Но в этом примере результаты «сплющены» - я получаю один объект для каждой пары «Блог-Пост», как вы это делали бы при обычном внешнем соединении 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))