【问题标题】:ASP NET MVC VB if searchstring is empty do or else LINQASP NET MVC VB 如果搜索字符串为空,则执行否则 LINQ
【发布时间】:2016-05-27 20:52:27
【问题描述】:
Function Index(SearchString As String, page As Integer?) As ActionResult
        If page Is Nothing Then
            page = 1
        Else
            page = page
        End If
        Dim List = (From m In db.maintenances Where (m.description OrElse m.description.Contains(SearchString)))

        Dim pagesize = 25
        Dim pageNumber As Integer = (If(page, 1))
        Return View(List.OrderBy(Function(o) o.id).ToPagedList(pageNumber, pagesize))
    End Function

现在我的控制器中有这段代码

如果搜索字符串为空,我想做什么返回所有结果,但如果它不为空,过滤那些包含搜索字符串的结果,我该怎么做,这样我就不必编写多个查询来过滤掉数据?

【问题讨论】:

    标签: asp.net asp.net-mvc vb.net linq


    【解决方案1】:

    您可以仅在需要时添加Where 子句。而不是

    Dim List = (From m In db.maintenances Where (m.description OrElse m.description.Contains(SearchString)))
    

    您更改为 Linq 扩展方法语法并仅在需要时添加 Where 子句:

    Dim List = db.maintenances.AsQueryable()
    If Not String.IsNullOrWhitespace(SearchString) Then
        List = List.Where(Function(x) m.description IsNot Nothing AndAlso m.description.Contains(SearchString))
    End If
    

    查询只会在你调用ToPagedList时在你的方法结束时执行,所以只有在没有搜索子句的情况下才会检索所有记录。

    如果需要再添加一个条件,只需再添加一个Where子句即可,例如:

    Dim List = db.maintenances.AsQueryable()
    If Not String.IsNullOrWhitespace(SearchString) Then
        List = List.Where(Function(x) m.description IsNot Nothing AndAlso m.description.Contains(SearchString))
    End If
    If selectedBranchId IsNot Nothing Then
        List = List.Where(Function(x) m.branch_id = selectedBranchId)
    End If
    

    【讨论】:

    • 由于某种原因,它返回此错误{“转换 varchar 值'Test.'时转换失败。'到数据类型位。"}
    • @JohnTrumpe 我认为错误出现在我从您的样本中提取的m.description OrElse 部分。我会更新我的答案。
    • 还有一个问题,我还想在过滤器中添加一个 branch_id,它是一个整数,我将如何使用您的示例来解决这个问题?
    • 有什么想法吗?为此?
    • @JohnTrumpe:如果没有搜索词,是否也会使用分支 ID?基本上你可以酌情把它整合到Where子句中。
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多