Asp.net EntityDataSource在查询中将*替换为%通配符

Asp.net EntityDataSource在查询中将*替换为%通配符,asp.net,entity-framework-4,Asp.net,Entity Framework 4,我有一个在许多地方使用EntityDataSource的应用程序 在EDS中,我根据来自文本框的用户输入手动构建Where子句 我希望用户在查询数据时能够输入“*”(星号)而不是“%” 使用实体SQL或EDS本身进行搜索/替换是否容易?我知道我实际上可以在输入数据后更改文本框,但当用户看到他的文本从*更改为%时,我认为他不会理解 我尝试过使用T-SQL Replace命令并执行以下操作: <asp:EntityDataSource ID="EDSParts" runat="server"

我有一个在许多地方使用EntityDataSource的应用程序

在EDS中,我根据来自文本框的用户输入手动构建Where子句

我希望用户在查询数据时能够输入“*”(星号)而不是“%”

使用实体SQL或EDS本身进行搜索/替换是否容易?我知道我实际上可以在输入数据后更改文本框,但当用户看到他的文本从*更改为%时,我认为他不会理解

我尝试过使用T-SQL Replace命令并执行以下操作:

<asp:EntityDataSource ID="EDSParts" runat="server" 
    ConnectionString="name=TTEntities" DefaultContainerName="TTEntities"
    EnableFlattening="False" EntitySetName="Parts"
    OrderBy="it.ID DESC"
    Where ="(CASE
                WHEN (@PartNumber IS NOT NULL) THEN
                    it.[Number] LIKE REPLACE(@PartNumber, "*", "%")
                ELSE
                    it.[ID] IS NOT NULL
            END)">
    <WhereParameters>
        <asp:ControlParameter Name="PartNumber" Type="String"
            ControlID="txtPartNumberQuery" PropertyName="Text" />
    </WhereParameters>
</asp:EntityDataSource>

但我收到一条“服务器标签格式不正确”的消息。在实体SQL引用中找不到等效的“replace”函数


有什么想法吗

您可以处理页面回发和修改txtPartNumberQuery的内容。EntityDataSource只能与%(因为它构建ESQL查询)一起工作,因此在执行数据绑定之前,您必须在代码隐藏中将*更改为%。

Sluama-您的建议修复了它!这是一个显而易见的答案。“正在终止Where子句字符串。我可以发誓我已经尝试过了,但我猜没有。因为,我只是碰巧回到这个问题,看到了你的答案,它就工作了

<asp:EntityDataSource ID="EDSParts" runat="server"
    ConnectionString="name=TTEntities" DefaultContainerName="TTEntities"
    EnableFlattening="False" EntitySetName="Parts"
    OrderBy="it.ID DESC"
    Where ="(CASE
                WHEN (@PartNumber IS NOT NULL) THEN
                    it.[Number] LIKE REPLACE(@PartNumber, '*', '%')
                ELSE
                    it.[ID] IS NOT NULL
             END)">
    <WhereParameters>
        <asp:ControlParameter Name="PartNumber" Type="String"
            ControlID="txtPartNumberQuery" PropertyName="Text" />
    </WhereParameters>
</asp:EntityDataSource> 


是的,我知道我能做到。这就是我提到它的原因。:)我在这方面没有太多经验,但我考虑过重写EDS类并修改构建Where子句的方法。理论上,这应该是可能的……这就是为什么我从未在实际应用中使用EntityDataSource、LinqDataSource或SqlDataSource的原因e、 我总是需要对绑定进行一定程度的控制,所以我完全手动操作,或者使用ObjectDataSource并将查询逻辑包装到数据源使用的自定义对象。我听到了。我已经编写了8个月的应用程序,这是最后一个障碍。我专门使用EntityDataSource。我有一些创造性的技巧:)我会我说我使用EDS的速度比使用ODS的速度快了25%。这为我节省了开发生命周期中的大量时间。虽然,有三个这样的例子让我难堪了几天。如果我不明白,我会在后面的帖子中修改它,并培训用户发生了什么。没有巨大的损失……你说呢要将双引号更改为单引号-
“*”
“%”
更改为
“*”
“%”
,这可能会删除错误。