DateTime WHERE Параметры - PullRequest
       27

DateTime WHERE Параметры

1 голос
/ 05 февраля 2012

У меня есть gridview, который заполняется из источника данных источника в asp.net. В моем коде C # мне нужно добавить параметр WHERE в источник данных объекта, который отфильтрует все данные, которые не> = validDate1 и <= validDate2. </p>

Вот где я нахожусь:

using (RamRideOpsEntities myEntities = new RamRideOpsEntities())
{
    var validDates = (from a in myEntities.AdminOptions
                      select new { a.ValidDate1, a.ValidDate2 }).FirstOrDefault();

    if (validDates != null)
    {
         RidesGridView.Where = "  ..... ??? " //TODO
    }
}

Редактировать: с ответами ниже, позвольте мне быть более ясным .. оператор validDates = .... просто получает две действительные даты, которые мне нужно отфильтровать по ... пункту "где" нужно добавить к источник данных объекта, поэтому данные, отображаемые в виде сетки, находятся в допустимом диапазоне дат.

Ответы [ 3 ]

3 голосов
/ 05 февраля 2012

Вы используете EntityDataSource.Это очень не-linq тип, который позволяет вам использовать строки, определенные во время выполнения, для изменения запросов.Более методика linq-ish предпочла бы, чтобы строка была частью языка программы, а компилятор превратил бы ее в дерево выражений (как другие опубликовали).Этот подход linq-ish не будет работать, пока вы используете EntityDataSource.

Из статьи MSDN, ссылающейся на EntityDataSource.Where , похоже, вам нужно использовать магическое слово"это", чтобы описать строку.Затем вы должны передать параметры в коллекцию .WhereParameters.

Код:

using (myEntities = new RamRideOpsEntities())
{
      var validDates = (from a in myEntities.AdminOptions
                        select new { a.ValidDate1, a.ValidDate2 }).FirstOrDefault();

      if (validDates != null)
      {
         RidesEDS.Where = @"it.TimeOfCall >= @ValidDate1 AND it.TimeOfCall <= @ValidDate2";
         RidesEDS.WhereParameters.Add(@"ValidDate1", DbType.DateTime, validDates.ValidDate1.ToString());
         RidesEDS.WhereParameters.Add(@"ValidDate2", DbType.DateTime, validDates.ValidDate2.ToString());
      }
 }
0 голосов
/ 05 февраля 2012

Вы не фильтруете GridView, вы фильтруете источник данных. Ответ будет зависеть от того, какой у вас источник данных, но при условии, что он совместим с Linq:

var items = dataSource.Where(
        d => d.Date >= validDates.ValidDate1 && d.Date <= validDates.ValidDate2
    );
RidesGridView.DataSource = items;
0 голосов
/ 05 февраля 2012
var validDates = (from a in myEntities.AdminOptions where 
    a.ValidDate1 >= validDate1 && a.ValidDate2 <= validDate2
    select new { a.ValidDate1, a.ValidDate2 }).FirstOrDefault();
...