ASP.NET EntityDataSource WHERE Clause



我是ASP.NET的新手,可以为我的EntityDataSource编写where子句。

我有以下EDS:

<asp:EntityDataSource ID="RidesEDS" runat="server" 
    ContextTypeName="RamRideOps.RamRideOpsEntities" EnableFlattening="False" 
    EntitySetName="Rides" EnableDelete="True" EnableUpdate="True">
</asp:EntityDataSource>

有一个"Rides"数据库和一个"AdminOptions"数据库,其中包含两个日期:validDate1和validDate2…我需要EDS只显示在两个有效日期之间具有"CallTime"的游乐设施。为了方便起见,我在page_load上用有效日期填充了两个隐藏字段(hf_validDate1和hf_validDate2)。有人能向我展示我需要向EntityDataSource代码添加什么吗?通过将CallTimes与带有WHERE子句的hf的值进行比较,可以实现这一点吗?

编辑:

这是我到目前为止所做的,虽然还不太奏效。。

<asp:EntityDataSource ID="RidesEDS" runat="server" 
        ContextTypeName="RamRideOps.RamRideOpsEntities" EnableFlattening="False" 
        EntitySetName="Rides" EnableDelete="True" EnableUpdate="True" Where="it.TimeOfCall > @validDate1Param AND it.TimeOfCall < @validDate2Param">
        <WhereParameters>
        <asp:ControlParameter ControlID="hf_validDate1" DbType="DateTime" 
          DefaultValue="1/01/2012 12:00:00 PM" Name="validDate1Param" PropertyName="Value" />
          <asp:ControlParameter ControlID="hf_validDate2" DbType="DateTime" 
          DefaultValue="1/01/2112 12:00:00 PM" Name="validDate2Param" PropertyName="Value" />
        </WhereParameters>
    </asp:EntityDataSource>
<asp:HiddenField ID="hf_validDate1" runat="server" />
<asp:HiddenField ID="hf_validDate2" runat="server" />

代码背后:

protected void Page_Load(object sender, EventArgs e)
        {
            using(RamRideOpsEntities myEntities = new RamRideOpsEntities())
            {
                var validDates = (from a in myEntities.AdminOptions
                                  select new { a.ValidDate1, a.ValidDate2 }).FirstOrDefault();
                if(validDates != null)
                {
                    hf_validDate1.Value = validDates.ValidDate1.ToString();
                    hf_validDate1.Value = validDates.ValidDate2.ToString();
                }
            }            
        }

您必须在整个数据源声明中使用Where Parameters。你可以查看这个链接,它有基本的教程来了解这些东西。实体数据源过滤

像这个

<asp:EntityDataSource ID="RidesEDS" runat="server" 
    ContextTypeName="RamRideOps.RamRideOpsEntities" EnableFlattening="False" 
    EntitySetName="Rides" EnableDelete="True" EnableUpdate="True">
// this needs to be added 
<WhereParameters> 
        <asp:ControlParameter ControlID="yourHiddenFiledID" DbType="YourHiddenFieldDataType" 
          DefaultValue="SomeDefaultValue" Name="NameToDescribe" PropertyName="Text" />
      </WhereParameters>
</asp:EntityDataSource>

如果你想添加程序,那么你可以像这个一样

RidesEDS.WhereParameters.Add("CategoryID", TypeCode.String, hiddenField.Value);

看看Ravi发布的答案,对我有用的是在代码背后这样做:

RidesEDS.WhereParameters.Add("CategoryID", TypeCode.String, hiddenField.Value);

然后在EntityDataSource:的服务器标签中设置

AutoGenerateWhereClause="true"

我要添加的唯一一件事是,如果您在codebehind中执行此操作,请确保在添加参数之前进行了(!PostBack)检查。我在回邮时做了这件事,结果开始变得疯狂。

相关内容

  • 没有找到相关文章

最新更新