Entity Framework Core / SQLite: GroupJoin após a junção de resultados "niveladores"
Usando o Entity Framework Core 2.1 e um banco de dados SQLite, obtenho um comportamento diferente de um LINQ GroupJoin se eu o usar após outro Join. Não está claro se isso é um bug ou se há algo que estou ignorando.
Eu criei um projeto mínimo do VS2017 para reproduzir isso, que pode ser encontrado aqui:
https://gitlab.com/haddoncd/EntityFrameworkGroupJoinIssue
Neste exemplo, recebo um objeto para cada linha na tabela Blog, cada uma contendo vários 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))
Mas neste exemplo, os resultados são "nivelados" - recebo um objeto para cada par de postagem de blog como você faria em uma junção externa do SQL convencional:
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))