什么是linq相当于sql截断日期?

时间:2015-10-14 14:50:55

标签: sql linq date

在给定日期的情况下获得本周六的linq相当于什么?

这就是我在sql中所做的事情

select trunc(sysdate, 'DAY')+6 from dual

谢谢

2 个答案:

答案 0 :(得分:2)

我不知道LINQ与它有什么关系,但您可以使用静态扩展方法创建本地帮助器方法甚至是扩展类:

   public static class DateTimeExtension
   {
     public static DateTime Next(this DateTime startDate, DayOfWeek targetDay)
     {
        do {
          startDate = startDate.AddDays(1);
        } while (startDate.DayOfWeek != targetDay)

        return startDate;
      }
   }

然后你可以这样做:

 DateTime nextSaturday = DateTime.Now.Next(DayOfWeek.Saturday);

这可以与LINQ一起使用:

 DateTime[] days = new DateTime[] { new DateTime(2015,10,5), new DateTime(2015,9,7)};

 var saturdays = from day in days select day.Next(DayOfWeek.Saturday);

答案 1 :(得分:1)

这取决于您的LINQ提供程序支持的内容。一般来说,在LINQ之外,您可以将其写为date.AddDays(6 - (int) date.DayOfWeek)。这有可能被LINQ提供商翻译。

但是,对于AddDays方法和DayOfWeek属性,任何特定的LINQ提供程序都可能需要使用特殊函数而不是.NET DateTime自己的方法和财产。实体框架到SQL Server有例如SqlFunctions.DateAddSqlFunctions.DatePart。其他实体框架提供商也可以接受这些。

您的问题中没有足够的信息来了解您正在使用哪个特定的LINQ提供商,这就是为什么我只回答一般信息。如果这些方法和属性都不适合您,则必须检查您正在使用的特定LINQ提供程序的文档。