首页 > 解决方案 > Entity Framework Core / SQLite:加入“扁平化”结果后的 GroupJoin

问题描述

使用 Entity Framework Core 2.1 和 SQLite 数据库,如果我在另一个 Join 之后使用它,我会从 LINQ GroupJoin 获得不同的行为。目前尚不清楚这是一个错误还是我忽略了一些东西。

我创建了一个最小的 VS2017 项目来重现这个,可以在这里找到:
https ://gitlab.com/haddoncd/EntityFrameworkGroupJoinIssue

在此示例中,我为 Blog 表中的每一行获取一个对象,每个对象包含多个 PostTitle:

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))

标签: c#entity-frameworksqliteentity-framework-coreentity-framework-core-2.1

解决方案


推荐阅读