linq中的时间日期转换

时间:2008-10-21 17:45:24

标签: .net linq linq-to-sql

我想将此格式为“7/20/2008”的日期时间与格式为“7/20/2008 7:14:53 AM”的数据库中的日期时间进行比较。

我尝试使用“like”子句但它没有用,因为“like”子句只使用字符串而我使用的是日期时间格式。

任何人都可以告诉如何在数据库中转换和比较它并拉出日期时间。

  protected void User_Querytime()
    {
    DataClasses2DataContext dc1 = new DataClasses2DataContext();
    DateTime date1;


    string date = Request.QueryString.Get("TimeOfMessage");
    date1 = Convert.ToDateTime(date);

    var query7 = from u in dc1.syncback_logs
                 where u.TimeOfMessage = date1
                 orderby u.TimeOfMessage descending
                 select u;
    GridView1.DataSource = query7;
    GridView1.DataBind();
    }

6 个答案:

答案 0 :(得分:3)

我认为您遇到了问题,因为date1仅包含日期,而您的数据库包含完整的日期/时间值。要查找匹配项,您需要选择以下方法之一:

1)在将数据库值与目标进行比较之前,从数据库值中删除时间信息 2)将目标转换为范围,然后查找该范围内的数据库值。

List<DateTime> dateTimes = new List<DateTime>();
dateTimes.Add(DateTime.Parse("7/20/2008 7:14:53 AM"));
dateTimes.Add(DateTime.Parse("7/20/2008 12:12:01 AM"));
dateTimes.Add(DateTime.Parse("7/21/2008 9:00:00 AM"));
dateTimes.Add(DateTime.Parse("7/20/2009 7:14:53 AM"));

DateTime targetDate = Convert.ToDateTime("7/20/2008");

// Remove time info from data in database
var matchingDates = from date in dateTimes
                    where date.Date == targetDate
                    select date;

// Or use your target date to create a range
DateTime rangeStart = new DateTime(targetDate.Year, targetDate.Month, targetDate.Day, 0, 0, 0);
DateTime rangeEnd = new DateTime(targetDate.Year, targetDate.Month, targetDate.Day, 23, 59, 59);

var matchingDates2 = from date in dateTimes
                     where (date >= rangeStart) && (date <= rangeEnd)
                     select date;

答案 1 :(得分:1)

虽然我无法测试您的确切问题,但我能够使用以下代码比较日期。

    // Random Date Collection
    List<DateTime> dateTimes = new List<DateTime>();
    dateTimes.Add(DateTime.Parse("7/20/2008 7:14:53 AM"));
    dateTimes.Add(DateTime.Parse("7/20/2008 7:14:54 AM"));
    dateTimes.Add(DateTime.Parse("7/20/2009 7:14:53 AM"));

    DateTime myDateTime = DateTime.Parse("7/20/2008");

    var query = from d in dateTimes
                where d.ToShortDateString() == myDateTime.ToShortDateString()
                select d;

答案 2 :(得分:0)

不要直接比较日期,而是将它与你接受的最小值/最大值进行比较。因此,而不是“DbDateCol = mydate”做“DbDateCol&gt; = myDate.Date和DbDateCol&lt; myDate.Date.AddDays(1)”。

通过使用Date属性,您将关闭时间组件(强制它为0)。通过添加一天,您将获得第二天的开始,并将其绑定在DateTime实例的日期。

答案 3 :(得分:0)

假设我正确理解你的问题,你应该可以使用

where u.TimeOfMessage.Date == date1

答案 4 :(得分:0)

假设TimeOfMessage属性是DateTime,那么你应该可以做到 TimeOfMessage.Date == date1

答案 5 :(得分:0)

using System.Data.Objects;

使用上面的内容并修改您的查询,如下所示:

 var bla = (from log in context.Contacts
               where EntityFunctions.TruncateTime(log.ModifiedDate) < today.Date
               select log).FirstOrDefault();