【发布时间】:2012-06-01 17:23:29
【问题描述】:
我正在尝试连接 LINQ 中的两个字段,以便我可以使用关键字进行过滤。我发现了一个发布在here 的问题,我认为这是我的答案,但由于某种原因,我得到了 0 条记录。这应该为自动完成文本框返回 JSON 结果(当我不连接字段时它可以工作)。
这是我的代码:
Function CostCodeList(ByVal term As String) As ActionResult
Dim results = From c In db.ORG_CHART_V
Let Fullname = CStr(c.COSTCTR_CD & " - " & c.BREADCRUMB)
Where Fullname.ToUpper.Contains(CStr(term).ToUpper)
Order By Fullname
Select New With {.label = Fullname, .id = c.ORG_NODE_ID}
Return Json(results.ToArray, JsonRequestBehavior.AllowGet)
End Function
我在退货时也遇到了这个错误:
公共成员 'ToArray' 类型为 'DbQuery(Of VB$AnonymousType_3(Of 未找到字符串,整数))'。
在尝试连接两个字段之前,我分别对它们进行了搜索,成功。但是当我将它们连接起来时,似乎我尝试的所有操作都会导致错误和/或零记录。
这是一个不同的功能:
Function RoleList(ByVal term As String) As ActionResult
Dim list As New ArrayList
Dim results As IQueryable(Of JOB_ROLE)
If IsNumeric(term) Then
results = From c In db.JOB_ROLE
Where CStr(c.JBROLE_NO).StartsWith(term)
Else
results = From c In db.JOB_ROLE
Where c.JOB_ROLE_NAME.ToUpper.Contains(CStr(term).ToUpper)
End If
results = results.OrderBy(Function(e) e.JOB_ROLE_NAME)
For Each item In results
list.Add(New With {.label = item.JOB_ROLE_NAME, .id = item.JOB_ROLE_ID})
Next
Return Json(list.ToArray, JsonRequestBehavior.AllowGet)
End Function
【问题讨论】:
-
list在哪里声明?在ToArray调用之前我没有看到它......我怀疑你的意思是results,但大概这意味着这不是你的真实代码,并且可能有其他差异。另外,Option Strict 是否开启?我怀疑不是……这就是问题所在。将results的赋值移动到与声明相同的语句(以允许类型推断)并打开 Option Strict。 -
是的,“列表”应该是“结果”。我在上面改了。我按照您的建议移动了作业,但在 results.toArray 上仍然出现错误。我无法设置 Option Strict On,因为它会导致文件中的其他代码出现许多错误。我不认为这应该是一个问题,因为在我尝试连接之前它很好。
-
您应该修复其他代码 - Option Strict 很少是一个好主意。我很惊讶它以前工作过 - LINQ 依赖于扩展方法,它依赖于编译时转换......你至少可以打开 Option Infer On 吗?
-
我认为 Jon 的意思是 Option Strict Off 并不是一个好主意。
-
我打开了 Option Infer On 并收到此错误:无法从指定的 'Then' 表达式的 ResultTypes 中推断出有效的 ResultType。重申一下,在错误之前我没有得到任何结果。我将发布上面的代码。
标签: asp.net-mvc vb.net json linq