【问题标题】:LINQ concatenate 2 fields to search onLINQ 连接 2 个要搜索的字段
【发布时间】: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


【解决方案1】:

这是按预期工作的新功能:

    Function CostCodeList(ByVal term As String) As ActionResult
        Dim list As New ArrayList

        Dim results = db.ORG_CHART_V.Where(Function(e) (CStr(e.COSTCTR_CD) + " - " + e.BREADCRUMB).Contains(CStr(term).ToUpper)).OrderBy(Function(o) o.COSTCTR_CD)

        For Each item In results
            list.Add(New With {.label = item.COSTCTR_CD & " - " & item.BREADCRUMB, .id = item.ORG_NODE_ID})
        Next

        Return Json(list.ToArray, JsonRequestBehavior.AllowGet)
    End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多