我是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)检查。我在回邮时做了这件事,结果开始变得疯狂。