我有一个在许多地方使用EntityDataSource的应用程序。
在EDS中,我根据TextBox'es的用户输入手动构建Where子句。
我希望用户在查询数据时能够输入“*”(星号)而不是“%”。
使用Entity SQL或EDS本身进行搜索/替换是否容易?我知道在输入数据后我实际上可以更改TextBox,但是当用户看到他的文本从*更改为%时,我认为他不会理解。
我尝试过使用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>
但是我得到了“服务器标签形成不好”的消息。我在Entity SQL参考中找不到等效的“替换”函数....
有什么想法吗?
答案 0 :(得分:1)
您可以处理页面回发并修改txtPartNumberQuery的内容。 EntityDataSource只能用于%(因为它构建了ESQL查询),因此在执行数据绑定之前必须在代码隐藏中将*更改为%。
答案 1 :(得分:1)
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>