ban*_*n-G 57 linq sql-server parameters limit
from f in CUSTOMERS
where depts.Contains(f.DEPT_ID)
select f.NAME
Run Code Online (Sandbox Code Playgroud)
depts
是IEnumerable<int>
部门ID 的列表()
这个查询工作正常,直到你传递一个大的列表(比如大约3000 dept ids)..然后我得到这个错误:
传入的表格数据流(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
Run Code Online (Sandbox Code Playgroud)
使用IndexOf()
修复错误但使查询变慢.有没有其他方法可以解决这个问题?非常感谢.
ADM*_*-IT 12
我的解决方案(指南 - > Guid列表):
List<tstTest> tsts = new List<tstTest>();
for(int i = 0; i < Math.Ceiling((double)Guides.Count / 2000); i++)
{
tsts.AddRange(dc.tstTests.Where(x => Guides.Skip(i * 2000).Take(2000).Contains(x.tstGuid)));
}
this.DataContext = tsts;
Run Code Online (Sandbox Code Playgroud)
为什么不在sql中编写查询并附加你的实体?
自从我在Linq工作以来已经有一段时间了,但是这里有:
IQuery q = Session.CreateQuery(@"
select *
from customerTable f
where f.DEPT_id in (" + string.Join(",", depts.ToStringArray()) + ")");
q.AttachEntity(CUSTOMER);
Run Code Online (Sandbox Code Playgroud)
当然,你需要防止注射,但这不应该太难.
归档时间: |
|
查看次数: |
64725 次 |
最近记录: |