我有一个我创建的类的 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。那么,您将如何编写此代码来查找与任何日期范围匹配的日期呢?
您可以使用LinqKit为了这:
var expr = PredicateBuilder.False<Deal>();
foreach(var range in criteria.DateRanges)
expr = expr.Or(d => dt.CloseDate >= range.Start && dt.CloseDate < range.End);
deals = deals.AsExpandable().Where(expr);
另一种选择是使用表达式树但这对于你想做的事情来说似乎有点过分了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)