Entity Framework Core / SQLite: GroupJoin después de unir resultados "aplanados"
Utilizando Entity Framework Core 2.1 y una base de datos SQLite, obtengo un comportamiento diferente de LINQ GroupJoin si lo uso después de otra Join. No está claro si esto es un error o si hay algo que estoy pasando por alto.
He creado un proyecto VS2017 mínimo para reproducir esto, que se puede encontrar aquí:
https: //gitlab.com/haddoncd/EntityFrameworkGroupJoinIssu
En este ejemplo, obtengo un objeto para cada fila en la tabla Blog, cada uno con múltiples 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))
Pero en este ejemplo, los resultados se "aplanan": obtengo un objeto para cada par Blog-Post como lo haría con una combinación externa 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))