【发布时间】:2009-03-17 21:47:16
【问题描述】:
from f in CUSTOMERS
where depts.Contains(f.DEPT_ID)
select f.NAME
depts 是部门 ID 列表 (IEnumerable<int>)
这个查询工作正常,直到你传递一个大列表(比如大约 3000 个部门 ID).. 然后我得到这个错误:
传入的表格数据流 (TDS) 远程过程调用 (RPC) 协议流不正确。此 RPC 请求中提供的参数过多。最大值为 2100。
我将查询更改为:
var dept_ids = string.Join(" ", depts.ToStringArray());
from f in CUSTOMERS
where dept_ids.IndexOf(Convert.ToString(f.DEPT_id)) != -1
select f.NAME
使用IndexOf() 修复了错误,但使查询变慢。有没有其他方法可以解决这个问题?非常感谢。
【问题讨论】:
-
like so 怎么样(将其分成可管理的部分)。其他(非 LINQ)选项涉及 CSV 和“拆分”UDF,以及表值参数(在 SQL2008 中)。
-
马克,如果我有从 1 到 2000 的各种参数,你能解释一下
contain的最佳替代品吗?我知道这会在数据库中创建一堆计划,但似乎like <input parameter> '%<search field>%'的使用将花费更多的数据库资源时间。我应该使用什么? -
Entity Framework不存在2100参数限制问题:stackoverflow.com/questions/8898564/…
-
您尝试过任何解决方案吗?未标记为无
-
当搜索
DEPT_id等于1时,会发现任何id的任何数字都有1!我错过了什么吗?
标签: sql-server linq parameters limit