1

假设我有这两个实体:

  • Document,其中包含一个 DateTime 属性(称为Date)。
  • Period,它包含两个代表时间段的DateTime 属性(称为DateFromDateTo )。

然后,考虑这个表达式,其中d表示Document并且p表示Period,它用于过滤Document集合以仅返回属于给定Period的那些:

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 集合之前进一步结合其他条件。

4

2 回答 2

4
var documentsInAllPeriods = documents.Where(d => periods.All(p => 
    d.Date >= p.DateFrom && d.Date <= p.DateTo));

(请注意,如果您想要任何时期的文件,而不是每个All时期的文件,您可以更改为。)Any

于 2013-05-10T14:15:42.137 回答
0

假设周期实体(周期)的集合可用于 lambda 表达式:

(d) => 
{ 
   bool cond = false;
   foreach(Period p in periods)  
   {
      // check period
      // return earlier if condition not met
   }

   return cond;
}
于 2013-05-10T14:19:59.043 回答