【发布时间】:2019-10-21 00:50:42
【问题描述】:
在我的数据库中,我有一些项目,这些项目反映了用户填写的文档的属性。文档中给出的每个值,例如您为字段选择某个选项或选中一个复选框,将成为我表中的项目/属性。
这些属性可能是:吸烟者、非吸烟者、地区(欧洲、美国、...)、头发颜色
在表格中,大致如下所示:
Document
ID | Name
1 | doc-1
2 | doc-2
3 | doc-3
Attribute
ID | Name
1 | Smoker
2 | Non-Smoker
3 | Region-Europe
4 | Region-USA
5 | Hair-Brown
6 | Hair-Blond
Item
ID | Document | Attribute
1 | 1 | 1
2 | 1 | 4
3 | 2 | 2
4 | 2 | 3
5 | 2 | 5
6 | 3 | 2
7 | 3 | 6
为了提供搜索可能性,应允许用户构建通用查询。例如,我想查找具有以下属性的文档:
(Smoker AND Region-USA) OR (Non-Smoker AND Region-Europe AND Hair-Blond)
(将导致找到文档 #1)
我怎样才能以最有效的方式执行这样的查询,并可能使用 EF-core 和 linq-to-sql 将其推送到 SQL? 我如何才能以最有效的方式在计划 SQL 中实际查询?
我可以在内存中轻松完成,但由于我的数据库包含 100k+ 项,所以这可能很快就会变慢。
感谢您对此的任何帮助!
更新:关于 SO 的相关问题
【问题讨论】:
-
我会说继续使用你在内存中工作的任何方法,看看它在实践中是否真的太慢了。你可能会发现它工作得很好。 “真正的问题是程序员在错误的地方和错误的时间花费了太多时间来担心效率;过早的优化是编程中万恶(或至少大部分)的根源。” ~唐纳德·高德纳
-
您想知道如何回答列出的具体查询,还是需要在运行时处理一般查询?
-
@NetMage:我会稍微改一下这个问题。我应该能够处理一般查询,因为用户可以使用 UI 构建查询
标签: c# sql linq linq-to-sql entity-framework-core