1

我是 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)填充了两个隐藏字段。任何人都可以通过将 CallTimes 与带有 WHERE 子句的 hf 的值进行比较来向我展示我需要添加到 EntityDataSource 代码中的内容吗?

编辑:

这是我到目前为止所拥有的,虽然不是很有效..

<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();
                }
            }            
        }
4

2 回答 2

3

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

像这样

<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);
于 2012-01-26T05:46:51.390 回答
0

看看拉维发布的答案,对我有用的是在后面的代码中这样做:

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

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

AutoGenerateWhereClause="true"

我唯一要添加的是,如果您在代码隐藏中执行此操作,请确保在添加参数之前进行 (!PostBack) 检查。我在回发时这样做,并开始得到疯狂的结果。

于 2013-09-15T22:40:13.970 回答