如何使用实体框架按日期搜索

本文关键字:日期 搜索 框架 何使用 实体 | 更新日期: 2023-09-27 17:53:03

我试图将日期转换为字符串,以便我可以对输入的值进行搜索。我使用lambda表达式和DateTime。解析精确,因为我只想使用输入的短日期。

这是我到数据库的连接:

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');
}

如何使用实体框架按日期搜索

您无法轻松比较两个日期,因为您仍然需要比较小时、分钟和秒。

相反,您希望让用户选择范围- From Date和to Date。

例如,

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格式然后搜索日期的每个部分以提取所需的日期我不确定这是否是您想要的方向但这对我有用

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

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

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来编写和分析您的查询。它是免费的(付费版本很便宜,但它非常强大和有用。)