【问题标题】:Using parameterised LIKE clauses in an EntityDataSource在 EntityDataSource 中使用参数化的 LIKE 子句
【发布时间】:2011-06-22 01:58:01
【问题描述】:

我有一个基本的EntityDataSource 绑定到GridView。我在GridView 上方有TextBox 用于搜索。

我的目标: a) 用户类型“jon” b) GridView` 被过滤,例如“乔纳森”,“恩乔纳”,“乔纳斯”。

我已经看到了几个如何将参数化的 LIKE 子句添加到我的数据源的 Where 属性的示例,但是它们都需要用户在搜索字符串中使用通配符(例如 %Jon 而不是 Jon)。这对于非专业用户来说是不可接受的,所以我想将通配符放在 Where 子句中。

SQL中的语法很明显:SELECT Name FROM Names WHERE Name LIKE N'%@p1%'

换句话说,如果@p1='Jon',我的WHERE子句就是LIKE N'%Jon%'

令人沮丧的是,EntityDataSource 中的 Where 子句似乎无法以这种方式工作。换句话说,以下内容不起作用:

<asp:EntityDataSource ID="edsNames" runat="server" 
    ConnectionString="name=SalesEntities" 
    DefaultContainerName="SalesEntities" EntitySetName="Names"
    OrderBy="it.Name" Where="it.Name LIKE '%@p1%'">
    <WhereParameters>
        <asp:ControlParameter ControlID="txtFilter" Name="p1" 
            PropertyName="Text" Type="String" DefaultValue="" />
    </WhereParameters>
</asp:EntityDataSource>

我很乐意使用默认值“”来为我提供“获取一切”子句,即LIKE '%%',但我的GridView 中没有返回任何内容。

令人沮丧的是,如果我对搜索结果进行硬编码,例如Where="it.Name LIKE '%Jon%'",效果很好。

有人知道怎么做吗?

【问题讨论】:

    标签: c# asp.net gridview sql-like entitydatasource


    【解决方案1】:

    我是这样工作的:

    Where="it.Name like ('%' + @p1 + '%')"
    

    这适用于 .NET 3.5 - 我认为 QueryExtender 和 OnQueryCreated(这也是在查询运行之前调整查询的一个选项)仅在 .NET >= 4.0 中可用。

    【讨论】:

      【解决方案2】:

      你可以尝试如下写 where 条件

      Where="@p1 IS NULL OR it.Name LIKE '%@p1%'"  
      

      以防万一它被视为空值

      【讨论】:

        【解决方案3】:

        您可以使用 QueryExtender 完成此操作。大致如下:

          <asp:EntityDataSource ID="edsEmployeeSearch" runat="server" 
            ConnectionString="name=HrProtoEntities" DefaultContainerName="HrProtoEntities" 
            EnableFlattening="False" EntitySetName="People" Include="Employee" 
            AutoGenerateWhereClause="True" >
        </asp:EntityDataSource>
        <asp:QueryExtender ID="QueryExtender1" runat="server" TargetControlID="edsEmployeeSearch">
            <asp:SearchExpression SearchType="Contains" DataFields="LastName">
                <asp:ControlParameter ControlID="txtSearch" />
            </asp:SearchExpression>
        </asp:QueryExtender>
        

        【讨论】:

          猜你喜欢
          • 2010-11-17
          • 2015-06-03
          • 2015-12-03
          • 2014-10-04
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多