2012-03-27 3 views
2

DB2 공급자를 사용하여 AiX 서버의 데이터베이스에 충돌합니다. 다음은 익명 형식을 반환하는 LINQ 문입니다.익명 형식의 Take() 사용 (DB2 공급자)

var docs = (from a in WIP 
      where (!dtFrom.HasValue && !dtTo.HasValue) || (a.QBE_DT.Value >= dtFrom.Value && a.QBE_DT.Value <= dtTo.Value) && a.STATUSCODE != "X" && a.KEY1 != "CABS" && a.KEY1 != "BPI" 
      group a by new 
      { 
       a.BATCH_ID, 
       a.POLICY_NUM, 
       a.QBE_DT 
      } into grp 
      select new 
      { 
       BatchId = grp.Key.BATCH_ID.Trim(), 
       BatchGroup = grp 
      }).ToList(); 

이로부터 반환되면 공급자가 시간 초과를 유발하여 인터럽트 오류로 인해 프로세스가 취소되었습니다. 내 생각은 레코드 집합의 하위 집합을 "가져가"면이 문제는 사라질 것입니다. '

SQL0418N A statement contains a use of an untyped parameter marker, the DEFAULT keyword, or a null value that is not valid. SQLSTATE=42610 

나는 내가 올바른 구문 확인하기 위해 생성 된 SQL을 볼 수 있었다 좋겠지 만, 내가 돈 : 내가 가진 문제는 그것이 발생하기 때문에 나는 단순히 ToList() 전에 Take(100)을 추가 할 수있다 이 상황에서 어떻게해야 할 지 알지 못한다. 위의 LINQ 문에서 첫 번째 X 요소를 가져 오는 우아한 방법이 있습니까?

답변

1

이를위한 해결 방법은 다시 소스 그때 그것은 definently 그룹이다

1

실제로 익명 형식을 사용하여 문제가 발생하는 경우 대신 명명 된 형식을 만들 수 있습니다.

public class BatchKey 
{ 
    public int BatchId {get;set;} 
    ... 
} 
... 
     group a by new BatchKey 
     { 
      BatchId = a.BATCH_ID, 
      ... 

그러나이 오류 메시지는 일종의 암호이며 익명 형식과 관련이없는 것은 확실하지 않습니다. 오류를 재생산 할 수있을 때까지 쿼리를 한 조각 씩 내려가는 것이 좋습니다. 그렇게하면 문제의 원인을 훨씬 더 확실하게 알 수 있습니다.

Take을 수행하려면 일부 제공 업체가 데이터 집합을 주문해야하므로 Take 앞에 OrderBy을 추가하는 것이 좋습니다. 또한 쿼리의 외부 당신이 할 수있는 평가를 할 수 있습니다 :

IQueryable<WIP> wips = WIP.Where(a => a.STATUSCODE != "X" && a.KEY1 != "CABS" && a.KEY1 != "BPI"); 
if (dtFrom.HasValue) { 
    wips = docs.Where(a => a.QBE_DT.Value >= dtFrom.Value); 
} 
if (dtTo.HasValue) { 
    wips = docs.Where(a => a.QBE_DT.Value <= dtTo.Value); 
} 
var docs = from a in wips 
      group a by ... 

나는 당신이 당신의 DB2 공급자를 사용하도록 LINQPad을 설정하고 생산지고있는 SQL 문을 볼 수 있어야합니다 생각합니다. (하지만이 오류는 SQL 문이 생성되기 전에 발생하는 것처럼 보입니다.)

+0

권취()로부터 메모리, 더 많은 양의 데이터를 다운로드하기위한 그룹핑 및 필터링을 수행 하였다. 그룹을 나가서 결과를 메모리에 저장 한 다음 그룹화 할 수 있습니다. 나는 이것을 할 수 있지만 우아하지는 않다. 생각? –

+0

@IsaacLevin : 그룹화하려는 개체를 나타내는 명명 된 클래스를 만들고 익명 형식 대신 해당 형식을 사용하면 어떻게됩니까? – StriplingWarrior

+0

@StriplingWarrier, 내가보기에 예를 들려 줄 수 있습니까? –

0

아마도이 부분과 쿼리에없는 개체에 대한 다른 참조 일 것입니다.

(!dtFrom.HasValue && !dtTo.HasValue) 

알아 내고 작동하는지 확인하십시오.

+0

같은 문제가 발생했습니다. –

관련 문제