我正在使用实体框架连接到SQL服务器数据库。
假设我有一个要查找的SQL表主键列表。
List<string> idList
我可以使用
返回所有匹配行的列表var results = (from id in idList
from row in db.database
where row.Id == id
select row).ToList();
为了让事情变得更有趣,我正在考虑使用它。
var results = (from id in idList
from row in db.database.AsParallel()
where row.Id == id
select row).ToList();
我是否正确地说这会导致每个ID查询并行查询?或者有更好的方法来加速多个ID查找?请赐教。
答案 0 :(得分:0)
假设您处于正常情况,即idList
相对较短且db.database
相对较长,则您不希望并行化查询。您要做的是在数据库上执行查询。为此,您可以将查询更改为:
from row in db.Rows
where idList.Contains(row.Id)
select row
生成高效的SQL,如:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Translation] AS [Translation]
FROM [dbo].[Rows] AS [Extent1]
WHERE [Extent1].[Id] IN (N'42', N'13')
而不是:
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Translation] AS [Translation]
FROM [dbo].[Rows] AS [Extent1]
从数据库中检索整个表,然后对其进行过滤(并行或不同步)。