1

LINQ 查询有一个小问题。

基本上我有两个列表,里面填满了日期。

List<DateTime> start = GetListOfStartDates();
List<DateTime> end = GetListOfEndDates();
DateTime date = new DateTime(2012, 1, 1);

如何执行 LINQ 查询,将日期与开始日期和结束日期进行比较,基本上是有意义的:

(start <= date && end >= date)

显然我知道它们是列表,所以这不起作用,我如何将单个日期与两个日期列表进行比较?基本上是在一组日期之间做一个。

开始索引将始终匹配结束索引,start[7]将始终匹配end[7]。我正在尝试将 mysql between-query 转换为 LINQ。所以我正在寻找给定的“日期”是否在任何起始对中。

4

3 回答 3

3

OP 目标的另一种解释:

bool b = start.Zip(end, (x, y) => new { Start = x, End = y })
              .Any(z => z.Start <= date && z.End >= date);

或者您可以使用All(),这取决于您的逻辑。

于 2012-08-08T13:06:22.757 回答
2

假设我正确解释了您的问题(请参阅上面的评论),我认为您最好将其作为 for 循环而不是 LINQ 查询来执行。我会做这样的事情:

public bool DateFallsInRange(IEnumerable<DateTime> startDates, IEnumerable<DateTime> endDates)
{
    for (int index = 0; index < startDates.Count; index++)
    {
        if ((startDates[index] <= compareDate) && (compareDate <= endDates[index])) return true;
    }
    return false;
}
于 2012-08-08T13:05:45.297 回答
0

开始和结束列表索引必须相同?例子:

start|end
[0]1940|1950
[1]1890|1930

1931 年的日期应该过去,因为 1890<1931<1950?还是因为 1931<1940 和 1931>1930 不应该通过?

于 2012-08-08T13:05:07.807 回答