Предложение ASP.NET EntityDataSource WHERE - PullRequest
1 голос
/ 26 января 2012

Я новичок в ASP.NET и могу использовать некоторую помощь в написании предложения where для моего EntityDataSource.

У меня есть следующие 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?

EDIT:

Вот что у меня такдалеко, не совсем работает, хотя ..

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

3 голосов
/ 26 января 2012

Вы должны использовать Where Parameters, в объявлении источника данных.Вы можете проверить эту ссылку, которая имеет основные учебники, чтобы понять вещи. Фильтрация источника данных Entity

вот так

<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);
0 голосов
/ 16 сентября 2013

Просто глядя на ответ, который опубликовал Рави, у меня получилось сделать это в коде, подобном следующему:

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

И затем установите это в теге сервера EntityDataSource:

AutoGenerateWhereClause="true"

Единственное, что я бы добавил, если вы сделаете это в коде, убедитесь, что у вас есть (! PostBack) проверка, прежде чем вы добавите параметр. Я делал это на обратной передаче и начал получать сумасшедшие результаты.

...