2014-02-28 2 views
0

두 데이터베이스를 쿼리하고 LINQ를 사용하여 결과 집합에 조인하고 쿼리하려고합니다. 그것은 쉬운 일이 될 것 같습니다,하지만 명시 적으로 참여하지 않고 주요 성능 문제가 있어요. 명시 적 조인을 수행 할 때 명시적인 형식을 만들기 위해 VB 구문에 문제가 있습니다. 작업 코드, 정리 :LINQ 데이터 테이블, 두 개의 형식화되지 않은 필드간에 조인

 For Each CurrRow In ResultsA.Tables(15).Rows 
      CurrDate = CurrRow("Date") 
      CurrID = CurrRow("ID") 
      CurrVal = CurrRow("Val") 
      Dim ResultsB = From SMW In DataSetA.Tables(0).AsEnumerable() _ 
          Where SMW("ID") = CurrScheduleID And SMW("Time") = CurrProfileDate _ 
          Select UTC_TS = SMW("Time"), Value = (SMW("VALUE")/1000), Time_Zone = SMW("Time_Zone"), ID = SMW("ID") 

      Dim CurrentResult As Object 
      Dim boolSchedDateFound As Boolean = False 
      For Each CurrentResult In ResultsB 
       If CurrentResult.Value <> CurrVal Then 
        'LogIntegrityCheckErrorRow() 
       End If 
       boolSchedDateFound = True 
      Next 
     Next 

이렇게하면 100,000 개의 행으로 실행됩니다.

나는대로이를 다시 작성하는 노력했습니다 :

 Dim MismatchRows = From TableAData In DataSetA.Tables(0).AsEnumerable() Join TableBData In DataSetB.Tables(15).AsEnumerable() _ 
       On New With {.TableAID = Convert.ToInt32(TableAData("ID")), .TableATime = Convert.ToDateTime(TableAData("Date"))} _ 
       Equals New With {.TableBDID = Convert.ToInt32(TableBData("ID")), .TableBTime = Convert.ToDateTime(TableBData("Time"))} _ 
      Select .................. (Hard to clean up, but this isn't the part that's failing) 

그리고 그것으로 시간의 곰을 보내고 있습니다. 근본적인 문제는 강력한 타이핑이 없다는 것입니다. 나는 보았다. 그러나 이것을하는 대부분의 사람들이 데이터에서 EF를 만들기 때문에 거의 조언이없는 것 같다. 어느 것이 끔찍한 아이디어는 아니지만 재 설계가 필요합니다. 그래서. 문제가 발생하면 오류를 제거하려면 어떻게합니까?

'Equals' cannot compare a value of type '<anonymous type> (line 2641)' with a value of type '<anonymous type> (line 2642)'. 

정말 고마워요.

답변

0

시도해 보셨습니까?

Dim MismatchRows = From TableAData In ei _ 
    Join TableBData In e2 On _ 
     TableAData("ID") Equals TableBData("ID") And TableAData("Data") Equals TableBData("Time") 
    Select ....... 
0
db.tb_DeviceGeFenceDetail.Join(db.tb_InventoryLog, Function(gfd) gfd.DeviceID, Function(il) il.deviceId, Function(gfd, il) New From { _ 
gfd.GeFenceLat1, _ 
gfd.GeFenceLng1, _ 
gfd.GeFenceLat2, _ 
gfd.GeFenceLng2, _ 
il.deviceName, _ 
il.DeviceIcon, _ 
gfd.DeviceID, _ 
il.id _ 
}).ToList().Where(Function(y) intValues.Contains(y.id)) 

는이 같은 테이블 뭔가에 합류 시도 할 수 있습니다.