【发布时间】:2020-04-08 04:00:15
【问题描述】:
我有一个int 列表,我需要从我的查询中选择所有记录,其中 id 包含在第二个列表中,如下所示:
//my list of ids
var ids=[myquery].select(x=> x.id)
query = query.Where(x => ids.Contains(x.Id));
现在 LINQ 会将上述内容转换为:
SELECT *
FROM [MyTable]
WHERE ([x].[id] IN (108,687, 689, 691, 694, 705, 703,.....)
现在 ids 列表会增长很多,我想这会破坏性能。
考虑到ids 列表将包含超过 200K 项,有什么更好的解决方案?
【问题讨论】:
-
或许您应该使用导航属性,但这取决于
[myquery]和query是什么。 -
您需要以某种方式发送这 200K 项。 Linq 转换为这样的 IN (...) 很好。我也有同样的需求,只是我的 ID 列表可以作为逗号分隔列表(字符串)使用,但略有不同。我最终创建了一个 CLR 函数(MS SQL Server)。
标签: c# .net entity-framework linq