【发布时间】:2016-08-10 18:38:59
【问题描述】:
我创建了一个包含日期范围的类的 IEnumerable。该类如下所示:
public class Range<T>
where T: struct
{
public T Start { get; set; }
public T End { get; set; }
}
我想在我的集合中查找日期列在任何指定日期范围内的所有记录。这是我的尝试:
deals = deals.Where(
deal =>
criteria.DateRanges.Any(
dt =>
deal.CloseDate >= dt.Start &&
deal.CloseDate < dt.End.Value.AddDays(1)));
我认为这会引发一个错误,因为 EF 不知道如何将 criteria.DateRanges.Any() 转换为 SQL。那么,您将如何编写此代码来查找与任何日期范围匹配的日期?
【问题讨论】:
-
如果日期范围保存在内存中而不是数据库中,那么如果您想在数据库上运行此查询,那么您将需要找到一种方法将它们发送过来。 EF 不知道如何将您的日期类转换为参数。
-
@stuartd,因此提出了这个问题
-
好吧,如果我不得不问他们是否在内存中,那么你没有很好地解释它。有多少范围,达到一个数量级?
-
日期范围由用户指定。我怀疑永远不会超过 5 个。
-
使用 IQueryable 和 a predicate builder 动态构建查询是一种方法
标签: c# entity-framework linq-to-entities entity-framework-6