ASP.NET EntityDataSource WHERE子句

时间:2012-01-26 05:37:45

标签: c# asp.net linq-to-entities where-clause entitydatasource

我是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与hf的值与WHERE子句进行比较来向我展示我需要添加到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();
                }
            }            
        }

2 个答案:

答案 0 :(得分:3)

您必须在entiry数据源声明中使用Where Parameters。你可以查看这个链接,它有基本的教程来理解这些东西。 Entity Datasource filtering

像这样

<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>

如果你想添加programatticaly,那么你可以这样做

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

答案 1 :(得分:0)

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

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

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

AutoGenerateWhereClause="true"

我要添加的唯一内容是如果你在代码隐藏中执行它,请确保在添加参数之前进行(!PostBack)检查。我是在回发时做的,并开始获得疯狂的结果。