Contains ()를 사용할 때 2100 매개 변수 제한 (SQL Server)에 도달
from f in CUSTOMERS
where depts.Contains(f.DEPT_ID)
select f.NAME
depts
IEnumerable<int>
부서 ID 목록 ( )입니다.
이 쿼리는 큰 목록 (약 3000 개의 부서 ID)을 통과 할 때까지 잘 작동합니다. 그러면이 오류가 발생합니다.
들어오는 TDS (Tabular Data Stream) 원격 프로 시저 호출 (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
사용 IndexOf()
하면 오류가 수정되었지만 쿼리가 느려졌습니다. 이 문제를 해결할 다른 방법이 있습니까? 정말 고마워.
내 솔루션 (가이드-> 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;
SQL로 쿼리를 작성하고 엔터티를 첨부하지 않는 이유는 무엇입니까?
Linq에서 일한 지 오래되었지만 여기에 있습니다.
IQuery q = Session.CreateQuery(@"
select *
from customerTable f
where f.DEPT_id in (" + string.Join(",", depts.ToStringArray()) + ")");
q.AttachEntity(CUSTOMER);
물론 주사로부터 보호해야하지만 그렇게 어렵지는 않습니다.
어딘가에이 문제를 해결하기 위해 이러한 문을 일괄 처리하는 기술이 있으므로 LINQKit 프로젝트 를 확인하고 싶을 것 입니다. 이 아이디어는 PredicateBuilder를 사용하여 로컬 컬렉션을 더 작은 덩어리로 나누는 것이라고 생각하지만 대신이 문제를 처리하는 더 자연스러운 방법을 찾고 있었기 때문에 솔루션을 자세히 검토하지 않았습니다.
불행히도 .NET Framework 4.0 또는 후속 서비스 팩에 대해이 문제를 해결할 계획이 없다는 내 제안 에 대한 Microsoft의 응답으로 나타납니다 .
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=475984
최신 정보:
MSDN 포럼에서 LINQ to SQL 또는 ADO.NET Entity Framework 에서이 문제가 해결 될 것인지에 대한 토론을 열었습니다 . 이러한 주제에 대한 자세한 내용과 XML 및 SQL UDF를 사용하여 만든 임시 해결 방법을 보려면이 게시물을 참조하십시오.
비슷한 문제가 있었고 두 가지 방법으로 해결할 수 있습니다.
- 교차 방법
- ID에 가입
목록에없는 값을 얻기 위해 Except 메서드 또는 left join을 사용했습니다.
최신 정보
EntityFramework 6.2는 다음 쿼리를 성공적으로 실행합니다.
var employeeIDs = Enumerable.Range(3, 5000);
var orders =
from order in Orders
where employeeIDs.Contains((int)order.EmployeeID)
select order;
Linq에서 생성 한 IN 문에 매개 변수로 전달하기 전에 부서 목록을 더 작은 집합으로 항상 분할 할 수 있습니다. 여길 봐:
'program story' 카테고리의 다른 글
Resharper 대 Coderush-2010 리메이크 (0) | 2020.12.26 |
---|---|
Google Maps JS API ImageMapType을 다각형에 클리핑 (0) | 2020.12.26 |
고정 헤더와 고정 열이있는 HTML 테이블? (0) | 2020.12.26 |
Python 모듈 종속성이있는 Python 소프트웨어를 쉽게 배포하는 방법은 무엇입니까? (0) | 2020.12.26 |
서버에서 HEIF (.heic)를 JPEG로 변환 하시겠습니까? (0) | 2020.12.26 |