使用连接构建lambda表达式
本文关键字:lambda 表达式 构建 连接 | 更新日期: 2023-09-27 18:13:06
假设我有两个实体:
- 文档,其中包含一个DateTime属性(称为Date)。
- Period,包含两个DateTime属性(称为DateFrom和DateTo),表示一段时间。
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表达式,我可以在过滤文档集合之前将其进一步组合到其他条件。
var documentsInAllPeriods = documents.Where(d => periods.All(p =>
d.Date >= p.DateFrom && d.Date <= p.DateTo));
(注意,如果您希望文档在任何时间段内而不是在每个时间段内,您可以将All
更改为Any
)
假设句号实体(句号)的集合可用于lambda表达式:
(d) =>
{
bool cond = false;
foreach(Period p in periods)
{
// check period
// return earlier if condition not met
}
return cond;
}