当我简单地说“选择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
答案 0 :(得分:0)
没有意义。整个表已经在内存中了,所以你要做的只是添加开销 LINQ从不复制值,因此优化它的唯一方法是完全删除列。
要回答这个问题,您需要选择anonymous type:
Select New With { .ID = c("candidateID"), ... }
您也可以使用当前语法,这相当于此。
由于您正在创建匿名类型,因此无法将其声明为IEnumerable(Of DataRow)
;您必须使用Option Infer
并撰写Dim candMatches = From ...