c# - 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))
解决方案
推荐阅读
- javascript - 在 p5js 中使用通过 HTML DOM 文件上传器上传的图片
- python - python按文本中的字母数排序
- reactjs - 是否有任何工具可以让我看到整个组件树?
- python - 大熊猫平均按时间戳和星期几
- azure - 如何使用应用程序洞察力进行分布式跟踪/跟踪
- android - 使用 Kotlin for Android Application 将图像编码为 Base64
- javascript - 使用 List JS 在 Angular JS 中进行过滤和排序
- mysql - 比较以 % 为单位的行值以衡量增长
- plugins - 问:如何使用插件:在具有多个内联 ckeditor 的页面上查找
- r - 给定 R 中的百分位等级,生成指数分布