我有下面这个函数需要一个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达克特的答案拿名气而去,只显示解决方案:
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;
}