Linq-to-Dataset语法:如何从查询中正确选择特定字段并使用它们

时间:2011-03-10 02:19:40

标签: linq-to-sql

当我简单地说“选择c”时,以下代码有效,但我想选择id,名字和姓氏,而不是整行,因为它相当冗长。

我对Linq很新。我有这个使用匿名类型,但已被指示定义所有变量(因此所有的“IEnumeralbe(of DataRow)”)...但我遇到的所有示例都没有使用“选择”我想要的方式并且他们不倾向于使用查询中选择的字段继续使用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 :(得分:0)

没有意义。整个表已经在内存中了,所以你要做的只是添加开销 LINQ从不复制值,因此优化它的唯一方法是完全删除列。

要回答这个问题,您需要选择anonymous type

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

您也可以使用当前语法,这相当于此。

由于您正在创建匿名类型,因此无法将其声明为IEnumerable(Of DataRow);您必须使用Option Infer并撰写Dim candMatches = From ...