2012-01-26 30 views
1

我是ASP.NET新手,可以使用一些帮助为我的EntityDataSource编写where子句。ASP.NET EntityDataSource WHERE子句

我有以下EDS:

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

有“游戏机”的数据库,其中包含两个日期“AdminOptions”数据库:validDate1和validDate2 ...我需要的EDS,只显示在两个有效日期之间有'CallTime'的游乐设施。为了实现这一点,我在page_load上使用有效日期(hf_validDate1和hf_validDate2)填充两个隐藏字段。任何人都可以告诉我什么,我需要添加到EntityDataSource代码来完成这一点,通过比较CallTimes与hf的值与WHERE子句?

编辑:

这里是我到目前为止,虽然不是很合作..

<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

,你必须使用上面的参数,在entiry数据源声明。你可以检查这个链接,它有基本的教程来理解事情。 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); 
+0

好吧,我想我正在得到一个地方,没有错误,但它似乎并没有过滤......我发布了我上面的内容,你介意看一眼吗? – SHeinema

+0

好吧,你尝试调试吗?我会看着我的身边。 k –

+0

是的,没有看到它..我可以很容易地在代码隐藏中获得正确的'游戏'列表,如果有一种简单的方法将它绑定到我正在显示的gridview,那也可以。 – SHeinema

0

只看该拉维张贴的答案,什么工作对我来说是这样做在代码后面是这样的:

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

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

AutoGenerateWhereClause="true" 

我想补充一点的是,如果你在代码隐藏做到这一点,确保你有一个(回传!)检查您添加参数之前。我正在回发,并开始得到疯狂的结果。