2011-03-10 3 views
0

"select c"라고 말하면 다음 코드가 작동하지만 ID, 성 및 성을 선택하려고합니다. , 그것은 꽤 길기 때문에 전체 행이 아닙니다.Linq-Dataset 구문 : 쿼리에서 특정 필드를 올바르게 선택하고 사용하는 방법

저는 Linq에 상당히 새로운 제품입니다. 익명 형식을 사용하여이 작업을 수행했지만 모든 변수를 정의하도록 지시되었습니다 (따라서 "IEnumeralbe (of DataRow)"). 그러나 필자가 사용한 모든 예제는 내가 원하는 방식으로 "선택"을 사용하지 않습니다. to 및 to는 쿼리에서 선택된 필드를 사용하여 for 루프를 사용하지 않는 경향이 있습니다.

모든 조언을 주시면 감사하겠습니다.

미리 감사드립니다.


Dim cands As IEnumerable(Of DataRow) = ds.Tables("Candidates").AsEnumerable() 
    Dim candPlace As IEnumerable(Of DataRow) = ds.Tables("JobCandPlacement").AsEnumerable() 
    Dim candComp As IEnumerable(Of DataRow) = ds.Tables(dctSearchCriteria.Values(i).ToString).AsEnumerable() 
    Dim strCandID As String = "" 

    Dim candMatches As IEnumerable(Of DataRow) = From c In cands, cc In candComp, cp In candPlace 
       Where c.Field(Of String)("candidateID") = cc.Field(Of String)("candID") _ 
       AndAlso cc.Field(Of String)("compSkill") = cSkill _ 
       Select c("candidateID"), c("firstName"), c("lastName") 

    For Each cm As DataRow In candMatches 
     strCandID = "" 
     strCandID = cm("candidateID") 
     increaseCandScore(strCandID) 
     If Not dtSuitableCands.Rows.Contains(strCandID) Then 
      Dim dr As DataRow = dtSuitableCands.NewRow 
      dr("candID") = cm("candidateID") 
      dr("candFName") = cm("firstName") 
      dr("candLName") = cm("lastName") 
      AddNewRow(dr) 
     End If 
    Next 
+0

'Option Infer'에는 아무런 문제가 없습니다. – SLaks

답변

0

아무 문제가 없었다. 전체 테이블이 이미 메모리에 있으므로, 수행 할 작업은 모두 이며, 오버 헤드는입니다.
LINQ는 값을 복사하지 않으므로이를 최적화하는 유일한 방법은 열을 완전히 없애는 것입니다.

이 질문에 대답하기 위해, 당신이 선택해야 anonymous type :

Select New With { .ID = c("candidateID"), ... } 

당신은이에 해당 현재 구문을 사용할 수 있습니다.

익명 형식을 작성 중이므로이를 IEnumerable(Of DataRow)으로 선언 할 수 없습니다. Option Infer을 써야만합니다. Dim candMatches = From ...

+0

옵션 Infer를 추가했습니다. 감사합니다. 나는 이것을 알지 못했습니다. – novice

+0

감사합니다. 나는 Linq에 대해 더 많은 연구를해야 제대로 할 수있을 것이라고 생각합니다. – novice

관련 문제