使用PLINQ进行多次ID查找

时间:2014-11-26 15:00:02

标签: c# sql-server entity-framework-6 plinq

我正在使用实体框架连接到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查找?请赐教。

1 个答案:

答案 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]

从数据库中检索整个表,然后对其进行过滤(并行或不同步)。