假设我有这两个实体:
然后,考虑这个表达式,其中 d 代表文档而 p 代表期间,用于过滤文档集合,仅返回属于给定期间的那些人:
d => d.Date >= p.DateFrom && d.Date <= p.DateTo
问题是,给定一组Period实体,我怎样才能构建一个lambda表达式,它表示多个表达式的连接,如上面的表达式,所以它给出:
d =>
(d.Date >= p1.DateFrom && d.Date <= p1.DateTo)
&& (d.Date >= p2.DateFrom && d.Date <= p2.DateTo)
&& (d.Date >= p3.DateFrom && d.Date <= p3.DateTo)
&& ...
我希望结果是 lambda表达式,在过滤我的Document集合之前,我可以进一步结合其他条件。
答案 0 :(得分:4)
var documentsInAllPeriods = documents.Where(d => periods.All(p =>
d.Date >= p.DateFrom && d.Date <= p.DateTo));
(请注意,如果您希望文档处于任何期间而不是每个期间的文档,则可以将All
更改为Any
。)
答案 1 :(得分:0)
假设lambda表达式可以收集句点实体(句点):
(d) =>
{
bool cond = false;
foreach(Period p in periods)
{
// check period
// return earlier if condition not met
}
return cond;
}