【发布时间】:2013-09-24 18:17:06
【问题描述】:
我有以下表格结构:
目前过滤用户是通过非常复杂的嵌套 SQL 查询实现的(而且它是由 Linq 自动生成的)。我看起来大概是这样的:
SELECT FROM (SELECT FROM (SELECT FROM ( infinity here...))))
有没有简化过滤过程的好方法?
请注意有不同的特征类型。以下是子查询条件示例:
... WHERE cv.Text like '%aaa%' AND c.Id = 5
... WHERE cv.ImageId IS NOT NULL AND c.Id = 10
... WHERE cv.Number > 5 AND c.Id = 33
等等……
将不胜感激任何帮助和想法(更改数据库结构、更改技术等...),谢谢!
【问题讨论】:
-
如果它是由 LINQ 生成的,那么你为什么要关心它是否看起来很复杂呢?数据库应该是 3NF,它看起来是。您可能在 ImageId 和 AllowedValueId 上缺少 FK。
-
有 FK,我只是没有将它们添加到 DB 图中以简化视图。实际上,我并不是 100% 信任 LINQ,而且我认为自动生成的 SQL 脚本(稍后会被“执行”)远未达到最佳性能。也许一些 DB 视图或存储过程会提供更好的结果。
-
您的
LINQ查询在哪里? -
你的问题很难说我们如何改进它。我认为你应该指定你想如何过滤用户,最后你想得到什么。
-
最终我会对用户 ID 感到满意。现在linq查询是由多种类型生成的,最后看起来像: users.Where(/*condition*/).Where(/*condition*/).Where(/*condition*/).Where(/*condition */) 等等...
标签: sql sql-server linq tsql