我有一个看似简单的 linq-to-sql 查询,它在多个列中搜索一些数据;像这样:
List<long> TheTableIDs = list of IDs (sometimes more than 2100)
var QueryOutput = (from x in TheDataContext.SomeTable
where TheTableIDs.Contains(x.ID) &&
x.Col1.Contains(SomeString) ||
x.Col2.Contains(SomeString))
select x.ID).ToList();
我得到的错误是这样的:
Additional information: The incoming request has too many parameters. The server supports a maximum of 2100 parameters. Reduce the number of parameters and resend the request.
解决这个问题的最佳方法是什么?
我环顾四周,发现的解决方案如下所示:
var QueryOutput = TheDataContext.SomeTable.AsEnumerable()
.Join(TheTableIDs, x => x.LeadID, ci => ci, (x, ci) => x)
.Where(x => SomeString.Contains(x.Col1) == true ||
SomeString.Contains(x.Col2) == true)
.Select(x => x.ID).ToList();
这会编译并且不会抛出任何异常,但似乎忽略了带有 SomeString.Contains
的 Where
子句
使该查询有效的解决方案是什么?
最佳答案
很简单 - 只要 TheTAbleID 包含的 ID 少于 2100 个 - 这样做是不合法的。
将表切成 2000 个 block ,然后分别查询每个 block ,可能在多个线程中。
关于c# - 传入请求的参数过多。服务器最多支持2100个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23045912/