【发布时间】:2014-02-06 19:09:29
【问题描述】:
假设我有一个有效的日程安排日期列表。像:23、27、29
我想根据上面的列表将给定的日期修改为下一个有效的日月。
如果您给定的日期是“23/11/2013”,那么下一个有效日期将是“27/11/2013” 但如果您给定的日期是“30/11/2013”,它必须返回“23/12/2013” 如果给定的日期是“30/12/2013”,它必须返回“23/01/2014”
我已经在 SQL 中完成了该操作,但现在我将其转换为 C#,这有点棘手。 我正在尝试在 SQL 相似性列表中使用 LINQ 来完成此操作,但它会让人感到困惑。
SQL 语句是(是的,我知道它不会很快):
SELECT TOP 1 @DATE = ISNULL(DateAdd(yy, YEAR(@DATE)-1900, DateAdd(m, (MONTH(@DATE)+CASE WHEN DATEPART(day,@DATE)>[DAY] THEN 1 ELSE 0 END) - 1, [DAY] - 1)),@DATE)
FROM @DAYS WHERE DateAdd(yy, YEAR(@DATE)-1900, DateAdd(m, (MONTH(@DATE)+CASE WHEN DATEPART(day,@DATE)>[DAY] THEN 1 ELSE 0 END) - 1, [DAY] - 1))>=@DATE
ORDER BY [DAY]
@DAYS 是一张工作表。
【问题讨论】:
-
你的 C# 和 LINQ 代码在哪里?
-
调度是访问成本低(已经在内存变量中)还是成本高(SQL 查询)?如果它们便宜,迭代解决方案将是最简单的。
-
@Tarec 如果我给你它有什么乐趣? ;)
-
@david.pfx 这是一个列表
只包含白天部分。 -
@Sergio 您可以使用 LINQ 使这变得非常简单,请参阅我的回答 :)