簡體   English   中英

如何使用實體框架按日期搜索?

[英]How to search by date using Entity Framework?

我正在嘗試將日期轉換為字符串,以便可以搜索輸入的值。 我正在使用 lamda 表達式和 DateTime.ParseExact,因為我只想使用輸入的短日期。

這是我與數據庫的連接:

var devices = db.Devices
            .Include(d => d.DeviceType)
            .Include(d => d.ManufacturerModel)
            .Include(d => d.ManufacturerModel.Manufacturer);

和我的搜索

if (!String.IsNullOrEmpty(searchString5))
{
    devices = devices.Where(s => DateTime.ParseExact(s.DateReceived,'dd/MM/yyyy');
}

您不能輕易比較兩個日期,因為您仍然需要比較小時、分鍾和秒。

相反,您希望讓用戶選擇范圍 - 從日期和到日期。

例如,

var query = db.Devices
            .Include(d => d.DeviceType)
            .Include(d => d.ManufacturerModel)
            .Include(d => d.ManufacturerModel.Manufacturer);

string fromDate = "1/15/2016", toDate = "1/30/2016";
    DateTime fromDateTime, toDateTime;

if(!DateTime.TryParse(fromDate, out fromDateTime))
{
    // Make fromDateTime to Start of Day - 1/15/2016 12:00:00 AM
    fromDateTime = fromDateTime.Date;
    query = query.Where(x => x.Date >= fromDateTime);
}

if (!DateTime.TryParse(toDate, out toDateTime))
{
    // Make toDateTime to End of day - 1/30/2016 11:59:59 PM
    toDateTime = toDateTime.Date.AddDays(1).AddTicks(-1);
    query = query.Where(x => x.Date <= toDateTime);
}

var result = query.ToList();

不要使用字符串。 讓框架為您完成繁重的工作。

DateTime dt;
if (DateTime.TryParse(searchString5, out dt)) {
    qry = qry.Where(s => s.Fecha.Date == dt.Date);
} else {
    throw new Exception("Bad input");
}

生成的SQL(以我為例)如下,相當不錯。

-- Region Parameters
DECLARE @p0 DateTime = '2016-03-19 00:00:00.000'
-- EndRegion
SELECT 
   ...
FROM 
   ...
WHERE CONVERT(DATE, [t0].[Fecha]) = @p0

這里有一個提示:使用LINQPad編寫和分析您的查詢。 它是免費的(付費版本很便宜,但功能強大且有用。)

使用實體搜索日期可能很粗糙我將字符串轉換為 DateTime 格式,然后搜索日期的每個部分以提取所需的日期我不確定這是否是您想要的方向 go 但這對我有用

                    DateTime date = Convert.ToDateTime(SearchText); 
                    query = query.Where(x => x.Date.Month == date.Month
                                          && x.Date.Day == date.Day
                                          && x.Date.Year == date.Year);

// 如果這對你有用,請告訴我

暫無
暫無

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

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