在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。因此,我正在寻找给定的“日期”是否在任何开始-结束对内。
发布于 2012-08-08 21:05:45
假设我正确地解释了您的问题(参见上面的注释),我认为您最好将其作为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-08 21:06:23
对OP目标的另一种解释:
bool b = start.Zip(end, (x, y) => new { Start = x, End = y })
.Any(z => z.Start <= date && z.End >= date);或者您也可以使用All(),这取决于您的逻辑。
发布于 2012-08-08 21:05:08
起始列表索引和结束列表索引必须相同?示例:
start|end
[0]1940|1950
[1]1890|19301931年的日期应该过去,因为1890<1931<1950?或者因为1931<1940和1931>1930而不应该通过?
https://stackoverflow.com/questions/11864980
复制相似问题