2012-01-26 4 views
0

구조체 배열 (aryShooters()) 있습니다. 그들이 어떤 게시물에 있는지, 그리고 활동 중인지 여부를 결정해야합니다. 그들이 그렇다면 나는 그들이 어느 색인에 있었는지 저장하고 싶다. 게시물이 채워지지 않은 경우 배열의 해당 지점에 대한 색인이 -1로 설정됩니다. 내가 겪고있는 문제는 내가 그것을 확인한 다음 AndAlso를 사용하여 나머지 라인을 단락시키지 않는다는 것이다.또한 Linq 쿼리 vb.net에서 작동하지 않습니다

Dim p1i as integer = -1 
Dim p1i as integer = -1 
Dim p1i as integer = -1 
Dim p1i as integer = -1 
Dim p1i as integer = -1 
For j as integer = 0 to UBound(aryShooters) 
    If aryShooters(j).active = true Then 
     Select Case aryShooters(j).post 
      Case 1 
       p1i = j 
      Case 2 
       p2i = j 
      Case 3 
       p3i = j 
      Case 4 
       p4i = j 
      Case 5 
       p5i = j 
     End Select 
    End If 
Next 

그리고 즉시 그 후 나는 내 쿼리 전화 : 나는 인덱스를 설정 한 경우 다음

이다. 이것을 망치고있는 마지막 5 라인 만.

Dim pos 
pos = From p In db.Banks 
      Where p.ShootId = shootIdProp And p.EventId = eventNo _ 
      And ((p.FlightNo >= (CurFlight - kd)) And (p.FlightNo <= (CurFlight + (x-1) + ku))) _ 
      And ((p.SectionNo Like lowsec) Or (p.SectionNo like upsec)) _ 
      And p.Inactive = False And (((p.P1 like p1a And p.P2 Like p2a And p.P3 Like p3a And p.P4 Like p4a And p.P5 Like p5a) And resetFlags = False) _ 
      Or ((p.NmbrOpenPosts >= numberShooters) And resetflags = True)) _ 
      And ((((p1i > -1) AndAlso ((Math.Abs(aryShooter(p1i).Ydg - p.HcpYds1) <= perTrap) Or (p.HcpYds1 = 0.0))) And _ 
      (((p2i > -1) AndAlso ((Math.Abs(aryShooter(p2i).Ydg - p.HcpYds2) <= perTrap) Or (p.HcpYds2 = 0.0))) And _ 
      (((p3i > -1) AndAlso ((Math.Abs(aryShooter(p3i).Ydg - p.HcpYds3) <= perTrap) Or (p.HcpYds3 = 0.0))) And _ 
      (((p4i > -1) AndAlso ((Math.Abs(aryShooter(p4i).Ydg - p.HcpYds4) <= perTrap) Or (p.HcpYds4 = 0.0))) And _ 
      (((p5i > -1) AndAlso ((Math.Abs(aryShooter(p5i).Ydg - p.HcpYds5) <= perTrap) Or (p.HcpYds5 = 0.0)))) 
      Select p 

수정 - 글쎄, 고쳐주었습니다. 0 위치에 공백을 추가했습니다. 여전히 참조 할 수는 있지만 실제로 읽지는 못합니다.

pos = From p In db.Banks 

은 다음과 같이해야합니다 :

pos = From p In db.Banks _ 

내가 줄 생각 :
내가 줄 생각 :

+0

이 왜 전혀 여기에 비트 연산자를 사용합니까? – Magnus

+0

@ Magnus, 가능한 한 효율적으로 많은 기준으로 쿼리에서 선택하는 방법을 제안하는 방법은 무엇입니까? 각 루프에 대한 거대한 if 문을 통해 조건을 실행하지 않는 것이 테이블을 통해 정렬하기위한 Linq/Sql을 통해 실행하는 것보다 효율적이지 않습니까? –

+0

여기서 'AndAlso'와'OrElse'를 사용해서는 안됩니까? – Magnus

답변

0

아마이 (내가 VB에서 전문가가 아니다) 도움이 될 것입니다
Or (p.HcpYds5 = 0.0)))) 
      Select p 

이어야합니다.

Or (p.HcpYds5 = 0.0))) _ 
      Select p 

마지막 if 문에는 사용되지 않은 괄호가 많이 있습니다.

And ((((p1i > -1) AndAlso ((Math.Abs(aryShooter(p1i).Ydg - p.HcpYds1) <= perTrap) Or (p.HcpYds1 = 0.0))) And _ 
      (((p2i > -1) AndAlso ((Math.Abs(aryShooter(p2i).Ydg - p.HcpYds2) <= perTrap) Or (p.HcpYds2 = 0.0))) And _ 
      (((p3i > -1) AndAlso ((Math.Abs(aryShooter(p3i).Ydg - p.HcpYds3) <= perTrap) Or (p.HcpYds3 = 0.0))) And _ 
      (((p4i > -1) AndAlso ((Math.Abs(aryShooter(p4i).Ydg - p.HcpYds4) <= perTrap) Or (p.HcpYds4 = 0.0))) And _ 
      (((p5i > -1) AndAlso ((Math.Abs(aryShooter(p5i).Ydg - p.HcpYds5) <= perTrap) Or (p.HcpYds5 = 0.0)))) 
      Select p 

은 다음과 같이해야합니다 : 나는 문 생각이에 대한

And _ 
      ((p1i > -1) AndAlso ((Math.Abs(aryShooter(p1i).Ydg - p.HcpYds1) <= perTrap) Or (p.HcpYds1 = 0.0))) And _ 
      ((p2i > -1) AndAlso ((Math.Abs(aryShooter(p2i).Ydg - p.HcpYds2) <= perTrap) Or (p.HcpYds2 = 0.0))) And _ 
      ((p3i > -1) AndAlso ((Math.Abs(aryShooter(p3i).Ydg - p.HcpYds3) <= perTrap) Or (p.HcpYds3 = 0.0))) And _ 
      ((p4i > -1) AndAlso ((Math.Abs(aryShooter(p4i).Ydg - p.HcpYds4) <= perTrap) Or (p.HcpYds4 = 0.0))) And _ 
      ((p5i > -1) AndAlso ((Math.Abs(aryShooter(p5i).Ydg - p.HcpYds5) <= perTrap) Or (p.HcpYds5 = 0.0))) _ 
      Select p 
+0

괄호가 많이 사용되고 있지만 실제로는 &와 &를 그룹화하는 데 사용됩니다. 마지막 "if"문 다음에 true가 반환되고 true이면 true입니다. 나는 내 다른 쿼리를 가지고 있지 않지만 위의 코드는 모두 원래의 코드와 비슷해야합니다. 다른 쿼리와 비슷한지 확인합니다. 그러나 코드는 AndAlso를 내 코드와 다른 참조 방법에서 사용하지 않을 때 이전에 작동했습니다. 이 이전 메서드는 새로운 구조체 배열에 통합되었습니다. –

+0

또한 원래의 컨텍스트에서 게시 된 구문은 작동하는 다른 쿼리와 비슷하다. –

관련 문제