0

我需要从表中选择日期间隔的记录。

但是在此模式中,要选择的日期保留为 nvarchar

20160511_155015 (yyyymmdd_hhmmss)

我不能用ToList()它来做DateTime.ParseExact(entry.StartDate, "yyyyMMdd_HHmmss", CultureInfo.InvariantCulture)

该表保存了数百万条记录。 所以我需要做这样的事情:

var preQuery = context.Table
              .AsNoTracking()
              .Select(x => new
             {
                StartDate = ConvertFrom()),
                Mode = x.Mode,
                SessionStart = x.AStart,
                SessionEnd = x.AEnd,
                x.SensorNumber
            })
            .Where(x => x.StartDate != null 
                   && x.StartDate >= startDate
                   && x.StartDate <= endDate)
            .ToList();

是否可以将字符串表示形式转换为 Datetime 然后继续 Where 子句?

4

2 回答 2

0

请试试这个DateTime.ParseExact(dateTime ,format,CultureInfo.InvariantCulture);

var preQuery = context.Table.AsNoTracking().Select(x => new
        {
            StartDate = ConvertFrom(),
            Mode = x.Mode,
            SessionStart = DateTime.ParseExact(x.AStart,"yyyyMMdd_HHmmss", CultureInfo.InvariantCulture),
            SessionEnd = DateTime.ParseExact(x.AEnd,"yyyyMMdd_HHmmss", CultureInfo.InvariantCulture),
            x.SensorNumber
        })
        .Where(x => x.StartDate != null && x.StartDate >= startDate && x.StartDate <= endDate)
        .ToList();
于 2016-07-18T11:36:46.090 回答
0

您可以尝试: StartDate.StartsWith("20160511") 左右.. 或 Convert.ToInt32(StartDate.Substring(0,8)) > 20160511

顺便说一句,我认为您可能想要运行一个脚本,只要它需要,并创建一个新列,该列将基于该列生成一个 DateTime

于 2016-07-18T11:31:06.757 回答