我有这个简单的连接查询该时间过长执行。
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/