簡體   English   中英

在實體框架查詢中將字符串時間轉換為日期時間或時間跨度

[英]Convert string time to datetime or timespan in entity framework query

我已經在數據庫中存儲了時間字符串,例如"12:20 PM" ,我想將其與linq查詢(EF)中的當前時間進行比較。 由於我無法使用Convert.ToDateTime等將其轉換,因為無法將其轉換為任何sql表達式。

我想寫一個如下查詢,但我知道這不會幫助。 請指教。

List<CompanyScheduler> companySchedulers = 
    context.CompanySchedulers
          .Where(m => m.IsActive && m.Start <= EntityFunctions.AddMinutes(td, m.TimeZoneOffset))
          .Where(m => (m.LastRun.HasValue && EntityFunctions.TruncateTime(m.LastRun) < tdExcludeTime) || (!m.LastRun.HasValue))
          .Where(m => (m.When == (int)When.Daily && (Convert.ToDateTime("01-01-1990 " + m.RecurAt).TimeOfDay < EntityFunctions.AddMinutes(td, m.TimeZoneOffset).Value.TimeOfDay)) ||
                      (m.When == (int)When.Once && !m.LastRun.HasValue) ||
                      (m.When == (int)When.Weekly && m.RecurrEvery.Contains(today)))
          .ToList();

在EF 6.x以下是不可能的。 可以使用存儲過程或進行所有轉換,然后再鏈接查詢。

沒有直接的方法可以將字符串“解析”為Linq到Entities中的 DateTimeTimeSpan ,但是可以使用SqlFunctionsDbFunctions類來實現:

對於TimeSpan

DbFunctions.CreateTime(SqlFunctions.DatePart("hh", timeString),
                       SqlFunctions.DatePart("mi", timeString), 
                       SqlFunctions.DatePart("ss", timeString));

對於DateTime

DbFunctions.CreateDateTime(SqlFunctions.DatePart("yy", dateString),
                           SqlFunctions.DatePart("mm", dateString),
                           SqlFunctions.DatePart("dd", dateString),
                           SqlFunctions.DatePart("hh", dateString),
                           SqlFunctions.DatePart("mi", dateString),
                           SqlFunctions.DatePart("ss", dateString));

您可以在集合上通過調用ToArray()ToList()將數據加載到內存中,並使用Convert.ToDateTime

var date = DateTime.Today;
var areEqual = dataContext.YourTable.ToList() 
        //now the data is in memory and you can apply whatever projection you want
        .Select(x => new{Date = Convert.ToDateTime(x.DateStringColumn)})
        .All(x => x.Date == date);

但是,如果數據集很大,則會增加內存使用量。 為避免這種情況,請使用Where()方法僅加載所需的記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM