【发布时间】:2021-12-12 21:52:36
【问题描述】:
我的 SQL Server 数据库中有一个标题-详细信息关系。我有大约 10k 个标头,每个标头都有 1-1k 个详细信息。并且唯一元素的数量约为 1k。
Elements [id]
1
2
3
Headers [id]
1
2
3
Details [id, header_id, element_id]
1 1 1
2 1 2
3 1 3
4 2 1
5 3 1
用这种结构查询标题列表及其详细信息非常容易:
var searchHeaderIds = new List<int>{1,2,3};
var headers = context.Headers
.Where(h => searchHeaderIds.Contains(h.Id))
.Include(h => h.Details)
.ToList();
但我要查询的是一个元素列表(1-200),其中每个元素都有一个它所属的标题列表(类似于反转)。我可以用 C# 编写如下:
var searchElementIds = new List<int>{1,2,3};
var headers = context.Details
.Where(d => searchElementIds.Contains(d.element_id))
.GroupBy(d => d.element_id)
.Select(g => new {
id = g.Key,
header_ids = g.Select(x => x.header_id) })
.ToList();
但我想知道,使用 SQL/EF 的强大功能最快的方法是什么?
UPD:我已准备好使用额外的数据结构,预处理数据库中的数据,或做任何其他事情来提高性能。
【问题讨论】:
-
使用
Join而不是Includestackoverflow.com/questions/33523974/…
标签: c# sql-server linq entity-framework-core