아래에이 ID의 목록을 가져와 일치하는 사람을 DB로 검색하는이 함수가 있습니다. 쿼리가 2100 개 이상의 쉼표로 구분 된 값 취할 수 없기 때문에여러 개의 쿼리로 쿼리를 분할 한 다음 결과를 결합하십시오.
public IQueryable<Person> GetPersons(List<int> list)
{
return db.Persons.Where(a => list.Contains(a.person_id));
}
내가 네 쿼리에이를 분할해야하는 이유는 다음과 같습니다
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의 대답에서 멀리 cred하게되는 것을 원하지 않는 , 그냥 솔루션을 보여
:
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;
}