我有这个简单的连接查询该时间过长执行。

filteredTags = (from ft in filteredTags
                join at in activeTagIds on ft.ID equals at
                select ft).ToArray();

这里filteredTags是IQueryable的和activeTagIds是List。

当我试图看到内置的查询它在activeTagIds做一个UNION ALL所有的ID,这是什么让我的查询执行缓慢。
....
UNION ALL
    SELECT
    5620 AS [C1]
    FROM  ( SELECT 1 AS X ) AS [SingleRowTable2]
UNION ALL
    SELECT
    5621 AS [C1]
    FROM  ( SELECT 1 AS X ) AS [SingleRowTable3]
.... so on..

如何避免这种超长的查询,并简化了更快的执行时间?

最佳答案

只是检查过滤标签ID是否处于事件的标记ID:

filteredTags = filteredTags.Where(ft => activeTagIds.Contains(ft.ID)).ToArray()

或者,如果你喜欢的查询和方法语法的混合:
filteredTags = (from ft in filteredTags
                where activeTagIds.Contains(ft.ID)
                select ft).ToArray();

两者都会生成 IN SQL 查询。

关于c# - IQueryable 和 List<int> 之间的 Linq 连接执行时间太长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42099484/

10-12 23:03