我是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();
}
}
}
答案 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)检查。我是在回发时做的,并开始获得疯狂的结果。