Синтаксис Linq-to-Dataset: как правильно выбрать определенные поля из запроса и использовать их - PullRequest
0 голосов
/ 10 марта 2011

Когда я говорю «выбрать c», работает следующий код, но я хочу выбрать идентификатор, имя и фамилию, а не всю строку, так как она довольно длинная.

Я довольно новичок в Linq. Я работал с анонимными типами, но получил указание определить все переменные (следовательно, все как "IEnumeralbe (of DataRow)") .. но ни один из примеров, с которыми я сталкивался, не использует "Select" так, как я хочу и они не склонны продолжать цикл 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

1 Ответ

0 голосов
/ 10 марта 2011

Нет смысла. Вся таблица уже находится в памяти, поэтому все, что вы будете делать, это добавление накладных расходов.
LINQ никогда не копирует значения, поэтому единственный способ оптимизировать это - полностью избавиться от столбцов.

Чтобы ответить на вопрос, вам нужно выбрать анонимный тип :

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

Вы также можете использовать свой текущий синтаксис, который эквивалентен этому.

Поскольку вы создаете анонимный тип, вы не можете объявить его как IEnumerable(Of DataRow); Вы должны использовать Option Infer и написать Dim candMatches = From ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...