【发布时间】:2011-08-23 19:14:26
【问题描述】:
我在下面有这个函数,它获取一个 id 列表并在数据库中搜索匹配的人。
public IQueryable<Person> GetPersons(List<int> list)
{
return db.Persons.Where(a => list.Contains(a.person_id));
}
我需要将其拆分为四个查询的原因是查询不能超过 2100 个逗号分隔值:The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Too many parameters were provided in this RPC request. The maximum is 2100.
如何将列表拆分为 4 部分并对每个列表进行查询。然后将结果加入一份人员名单?
已解决
我不想将其作为自己的答案发布并从@George Duckett 的答案中拿走信任,只是展示解决方案:
public IQueryable<Person> GetPersons(List<int> list)
{
var persons = Enumerable.Empty<Person>().AsQueryable<Person>();
var limit = 2000;
var result = list.Select((value, index) => new { Index = index, Value = value })
.GroupBy(x => x.Index / limit)
.Select(g => g.Select(x => x.Value).ToList())
.ToList();
foreach (var r in result)
{
var row = r;
persons = persons.Union(db.Persons.Where(a => row.Contains(a.person_id)));
}
return persons;
}
【问题讨论】:
标签: c# asp.net asp.net-mvc