如何使用linq从varchar(32)类型的datetime列中仅获取Date

时间:2016-01-19 06:36:14

标签: c# linq asp.net-mvc-4

我在表格中有一个列为PSR_LOAD_DATE_TIME,其中包含格式值2016-01-09 14:06:19

但该列的类型为varchar(32)。

我有一个linq查询来比较PSR_LOAD_DATE_TIME和特定日期。但它将PSR_LOAD_DATE_TIME与时间进行比较。

  

其中(t0.PSR_LOAD_DATE_TIME.CompareTo(from_Date)> = 0)&& (t0.PSR_LOAD_DATE_TIME.CompareTo(to_Date)< = 0)

此处from_Date和to_Date变量包含的值如2016-01-03。

所以,我需要从PSR_LOAD_DATE_TIME中删除时间部分。

如何编写Linq查询?

2 个答案:

答案 0 :(得分:1)

您可以将PSR_LOAD_DATE_TIME中的DateTime表达式解析为实际的DateTime,然后只使用该DateTime对象的Date部分。

void Main()
{
    List<string> dates = new List<string>();
    dates.Add("2016-01-18 12:05:12");
    string from_Date = "2016-01-16";
    string to_Date = "2016-01-18";

    var date = from d in dates where (DateTime.ParseExact(d, "yyyy-MM-dd HH:mm:ss", null)
       .Date.CompareTo(DateTime.ParseExact(from_Date, "yyyy-MM-dd", null)) >= 0 && 
       DateTime.ParseExact(d, "yyyy-MM-dd HH:mm:ss", null)
       .Date.CompareTo(DateTime.ParseExact(to_Date, "yyyy-MM-dd", null)) <= 0)
       select d;

    foreach(var d in date) {
        Console.WriteLine(d.ToString());
    }
}

答案 1 :(得分:0)

我想你用EF来查询这个。

所以你应该试试

DbFunctions.TruncateTime