如何使用ASP中的两个字段之一搜索数据库表:TextBox和LINQ to Entities

时间:2010-01-20 05:40:43

标签: asp.net-3.5

我的目标是在partsearch.aspx页面上放置一个搜索框。搜索框将包含一个文本框和一个下拉列表。下拉列表有两个项,PartName或NSN,需要在我的数据库查询的where子句中使用。如果PartName是选定的值,则查询需要基于该字段。如果NSN是选定的值,则查询需要在NSN字段中搜索文本框的内容txtSearch。

我的页面中有以下代码:

<asp:Label runat="server" ID="lblSearch" CssClass="black-normal-txt">Search by Part Name or NSN:</asp:Label>
<asp:TextBox runat="server" ID="txtSearch" CssClass="txtSearch swap_value" Text="Search for Parts"></asp:TextBox>
<asp:DropDownList runat="server" ID="ddlsearch" CssClass="black-normal-txt">
<asp:ListItem>Part Name</asp:ListItem>
<asp:ListItem>NSN</asp:ListItem></asp:DropDownList>
<asp:Button runat="server" ID="btnSubmit" Text="Search" />

代码隐藏看起来像:

Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
    Using PartEntities As New diel_inventoryEntities()
        Dim Parts = PartEntities.PartList
        Dim query = From PartList In Parts

        If (ddlsearch.selecteditem.tostring() = "PartName") Then
            query = query.Where(Function(t) t.PARTNAME.Contains(txtSearch))
        ElseIf (ddlsearch.selecteditem.tostring() = "NSN") Then
            Query = Query.where(Function(t) t.NSN.Contains(txtSearch))
        End If
    End Using
End Sub

我收到以下错误:

错误2重载解析失败,因为无法使用这些参数调用可访问的“Where”:     扩展方法'Public Function Where(谓词As System.Func(Of Diel_inventoryModel.PartList,Integer,Boolean))As System.Collections.Generic.IEnumerable(Of Diel_inventoryModel.PartList)'在'System.Linq.Enumerable'中定义':嵌套函数与委托'System.Func(Of Diel_inventoryModel.PartList,Integer,Boolean)'的签名不同。     扩展方法'Public Function Where(predicate As System.Func(Of Diel_inventoryModel.PartList,Boolean))As System.Collections.Generic.IEnumerable(Of of Diel_inventoryModel.PartList)'在'System.Linq.Enumerable'中定义:重载解析失败,因为没有可访问的'Contains'可以用这些参数调用:     'Public Function Contains(value As String)As Boolean':'System.Web.UI.WebControls.TextBox'类型的值不能转换为'String'。     'System.Linq.Enumerable'中定义的扩展方法'Public Function Contains(value As Char)As Boolean':'System.Web.UI.WebControls.TextBox'类型的值不能转换为'Char'。     扩展方法'Public Function Where(谓词As System.Linq.Expressions.Expression(Of System.Func(Of Diel_inventoryModel.PartList,Integer,Boolean))))作为System.Linq.IQueryable(Of Diel_inventoryModel.PartList)'在'System中定义' .Linq.Queryable':嵌套函数与委托'System.Func(Of Diel_inventoryModel.PartList,Integer,Boolean)'的签名不同。     扩展方法'Public Function Where(谓词As System.Linq.Expressions.Expression(Of System.Func(Of Diel_inventoryModel.PartList,Boolean)))作为System.Linq.IQueryable(Of Diel_inventoryModel.PartList)'在'System.Linq中定义' .Queryable':重载解析失败,因为不能使用这些参数调用可访问的'Contains':     'Public Function Contains(value As String)As Boolean':'System.Web.UI.WebControls.TextBox'类型的值不能转换为'String'。     'System.Linq.Enumerable'中定义的扩展方法'Public Function Contains(value As Char)As Boolean':'System.Web.UI.WebControls.TextBox'类型的值不能转换为'Char'。 c:\ inetpub \ wwwroot \ mydomain.com \ PartSearch.aspx.vb 15 25 http://localhost/mydomain.com/

是否有人熟悉此错误?如果是这样,我该如何诊断并修复它?

非常感谢您的帮助和指导。

1 个答案:

答案 0 :(得分:2)

尽量不要依赖VB默认属性(甚至不确定它们是否仍然存在于VB.NET中 - 暂时没有使用它);直接使用Text控件上的TextBox属性:Contains(txtSearch.Text)

Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) 

Handles btnSubmit.Click
    Using PartEntities As New diel_inventoryEntities()
        Dim Parts = PartEntities.PartList
        Dim query = From PartList In Parts

        If (ddlsearch.selecteditem.tostring() = "PartName") Then
            query = query.Where(Function(t) t.PARTNAME.Contains(txtSearch.Text))
        ElseIf (ddlsearch.selecteditem.tostring() = "NSN") Then
            Query = Query.where(Function(t) t.NSN.Contains(txtSearch.Text))
        End If
    End Using
End Sub