c# - 在 EntityDataSource 中使用参数化的 LIKE 子句

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

我有一个基本的 EntityDataSource绑定(bind)到 GridView .我有TextBoxGridView 之上用于搜索。

我的目标: 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%'" , 它完美地工作。

有谁知道这样做的方法吗?

最佳答案

我是这样工作的:

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

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

关于c# - 在 EntityDataSource 中使用参数化的 LIKE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4910485/

相关文章:

android - 我的 GridView/ListView 仅在 android api 18+ 中触摸后才会呈现

c# - 从 SelectMethod 保存第二个结果集

c# - XML 验证错误 : The element is not declared

c# - Web 部署中的 Web 部署任务失败

asp.net - 我们是否需要保护 cookie .ASPXANONYMOUS

asp.net - 具有灵活高度的Gridview

c# - 如何在Grid Cell中使用edit Mask?

c# - 带有 TextBlock 的 XAML 数据模板样式边框

c# - 在 C# 中将 JSON 列表解析为 int 数组

c# - Wcf 发送 xml 内容类型而不是 json,