0

在代码隐藏中,我想为 entitydatasource 应用一个动态 where 子句,但我希望这个 where 是一样的而不是相等的。我有这个代码工作,它是相等的我想要一个等价代码,它以某种方式将它翻译成一个 Like 语句。

EntityDataSource1.WhereParameters.Add("Name", TypeCode.String, tbxSearch.Text);

阅读 Jupaol 评论后的解决方案:

xml:

<WhereParameters>
   <asp:ControlParameter ControlID="tbxSearch" Name="Name" Type="String" />
</WhereParameters>

代码背后:(加载事件)

if (string.IsNullOrEmpty(tbxSearch.Text))
{
   this.EntityDataSource1.Where = "1=1";  //fetch all data if empty
}
else
{
   this.EntityDataSource1.Where = "it.Name like '%' + @Name + '%'"; //filter
}
4

1 回答 1

2

在该代码中,您只添加一个参数,您需要定义类似比较的位置在 where 子句中

您发布的代码可以翻译成:

    <asp:EntityDataSource runat="server" ID="eds"
        .....
        Where="it.fname like '%' + @Name + '%'"
        <WhereParameters>
            <asp:ControlParameter ControlID="tbxSearch" Name="Name" DefaultValue="" />
        </WhereParameters>

在后面的代码中添加 where:

this.eds.Where = "it.fname like '%' + @Name + '%'";

编辑1:

出于某种原因,如果我像您一样放置参数声明(在代码中),则它不起作用,但是如果我将参数放置在标记中,如下所示:

        <WhereParameters>
            <asp:ControlParameter ControlID="tbxSearch" Name="Name" Type="String" DefaultValue="" />
        </WhereParameters>

而在Page_Load

this.eds.Where = "it.fname like '%' + @Name + '%'";

有用

于 2012-07-19T09:01:58.097 回答