Entity Framework Core / SQLite: GroupJoin после объединения "сглаживает" результаты - PullRequest
0 голосов
/ 09 сентября 2018

Используя 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))
...