我有一个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'子句需要添加到实体数据源,因此网格视图中显示的数据在有效日期范围内。
答案 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;