如何在Linq where子句中将字符串转换为datetime

时间:2018-03-30 15:43:53

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

DateTime newDate = DateTime.Now.AddDays(-30);

var queryResultPage = (from r in CustomPlanning
                       where (r.Assignment == "In Use") && 
                             (r.CUST_SHRT_NM != null) && 
                              System.Convert.ToDateTime(r.lastlogontimestamp) < newDate && 
                             !(from uA in SurveyActivity                                                                                                                                                                  
                               where uA.CustomDemandID == r.ID
                               select uA.CustomDemandID).Contains(r.ID)
                       select r)
                       .OrderBy(t => t.ID);

以上是我的代码。 lastlogontimestamp是我表中的字符串字段。我需要执行此检查以在网格中显示查询结果。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

好的我试过这个并且有效

DateTime newDate = DateTime.Now.AddDays(-30);

var queryResultPage = (from r in CustomPlanning
                       where (r.Assignment == "In Use") && (r.lastlogontimestamp != null && r.lastlogontimestamp != string.Empty) 
                       &&  (r.CUST_SHRT_NM != null) 
                       && !(from uA in SurveyActivity where uA.CustomDemandID == r.ID select uA.CustomDemandID).Contains(r.ID)
                       select r).OrderBy(t => t.ID).ToList();
queryResultPage = queryResultPage.Where(r => System.Convert.ToDateTime(r.lastlogontimestamp) < newDate).ToList();

答案 1 :(得分:0)

您不能直接在此查询中。您需要在列表中实现查询的结果,并运行另一个查询以使用Linq-To-Objects过滤返回的CustomPlanning(它支持转换)。

您可以将newDate转换为字符串

string newDate = DateTime.Now.AddDays(-30).ToString();

并尝试比较字符串,但您需要涵盖很多很多情况,因此不建议这样做。您可以考虑将lastlogontimestamp的类型更改为DateTime,当您有日期时,将它们存储为日期是很自然的。