簡體   English   中英

LINQ to Entities - 比較日期

[英]LINQ to Entities - Comparing Dates

是否有更好(更好/更有效)的方法來做到這一點?

return View(db.Things
    .Where(t => t.DateTimeObj.Month == DateTime.Today.Month 
        && t.DateTimeObj.Day == DateTime.Today.Day)
    .OrderByDescending(e => e.DateTimeObj)
    .Take(num)
);

以下不起作用(LINQ to Entites中沒有Date對象)。

今日記錄:

return View(db.Things
    .Where(t => t.DateTimeObj.Date == DateTime.Today)
    .OrderByDescending(e => e.DateTimeObj)
    .Take(num)
);

過去24小時記錄:

return View(db.Things
    .Where(t => t.DateTimeObj > DateTime.Today.AddHours(-24))
    .OrderByDescending(e => e.DateTimeObj)
    .Take(num)
);

編輯:

這似乎可以解決問題:

return View(db.Things
    .Where(t => t.DateTimeObj > SqlFunctions.DateAdd("dd", -1, DateTime.Now))
    .OrderByDescending(e => e.DateTimeObj)
    .Take(num)
);

Chris Sainty指出的可能的陷阱:

  1. 僅限SQL Server(可能?)
  2. 日期計算由SQL Server執行,因為選擇在linq2sql轉換中提供預先計算的日期。

看一下msdn上的SqlFunctions類,它提供了對sql datediff等函數的訪問。

請注意,它們不能用於在C#中運行代碼,它們只是查詢解析器理解並可以轉換為T-SQL的占位符。 顯然這只是SQL Server,除非其他提供程序包裝了這些函數。

只需在此之前聲明您的“比較”日期

var today = DateTime.Today;
return View(db.Things
    .Where(t => t.DateTimeObj.Date == today)
    .OrderByDescending(e => e.DateTimeObj)
    .Take(num)
);

//Last 24 hours records:
var yesterday = DateTime.Now.AddDays(-1);
return View(db.Things
    .Where(t => t.DateTimeObj > yesterday)
    .OrderByDescending(e => e.DateTimeObj)
    .Take(num)
);

暫無
暫無

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

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