DateTime WHERE参数

时间:2012-02-05 02:36:28

标签: c# asp.net linq-to-entities where-clause

我有一个gridview,它是从asp.net中的entitydatasource填充的。在我的c#代码隐藏中,我需要向实体数据源添加一个WHERE参数,该参数将过滤掉所有不是> = validDate1和< = validDate2的数据。

我在这里:

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 = ....语句只是得到我需要过滤的两个有效日期..那里'where'子句需要添加到实体数据源,因此网格视图中显示的数据在有效日期范围内。

3 个答案:

答案 0 :(得分:3)

您正在使用EntityDataSource。这是一种非unq linq类型,允许您使用运行时定义的字符串来修改查询。更多linq-ish技术更喜欢字符串是程序语言的一部分,编译器会把它变成表达式树(正如其他人发布的那样)。只要您使用EntityDataSource,那个linq-ish方法就无法工作。

在引用EntityDataSource.Where的msdn文章中,您似乎需要使用魔术词“it”来描述该行。然后,您将参数提供给.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());
      }
 }

答案 1 :(得分:0)

var validDates = (from a in myEntities.AdminOptions where 
    a.ValidDate1 >= validDate1 && a.ValidDate2 <= validDate2
    select new { a.ValidDate1, a.ValidDate2 }).FirstOrDefault();

答案 2 :(得分:0)

您不过滤GridView,而是过滤数据源。答案取决于您拥有的数据源类型,但假设它与Linq兼容:

var items = dataSource.Where(
        d => d.Date >= validDates.ValidDate1 && d.Date <= validDates.ValidDate2
    );
RidesGridView.DataSource = items;