微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linq 在日期内获取值没有带来正确的值

如何解决Linq 在日期内获取值没有带来正确的值

我有这个 Linq 查询,我想用它来列出具有日期范围的项目。

代码如下:

[HttpPost]
    public JsonResult AjaxMethod(string search,DateTime startDate,DateTime endDate)
    {
        var stDate = startDate.Date;
        var enDate = endDate.Date;
        var str = search;
       
        List<LoanAccount> loanAccounts  = (from loanCustomer in db.LoanAccounts
                                           where (loanCustomer.Account_Number.Contains(search) || search == null) 
                                           && (loanCustomer.Date_Opened >= stDate && loanCustomer.Date_Opened <= enDate)
                                           select loanCustomer).ToList();
        return Json(loanAccounts);
    }

如果stdate 是23/01/2021 并且endate 是23/01/2021,它不会返回当天的值。如果我将 enDate 更改为 24/01/2021,它将带来 23/01/2021 的数据,并且不会包括 24/01/2021。是我遗漏了什么吗?

解决方法

23-01-202123-01-2021 00:00:00 相同。因此,比较 23-01-2021 14:00:00 <= 23-01-2021 将是 false

换句话说,日期范围 23-01-202123-01-2021 不是一个范围,因为开始 (23-01-2021 00:00:00) 和结束 (23-01-2021 00:00:00) 是相同的。>

相反,您需要将结束日期晚一天,然后只使用严格小于结束日期的所有内容。所以范围是 23-01-202124-01-2021,本质上是 23-01-2021 00:00:0024-01-2021 00:00:00

因此,您的解决方案应该是:

var stDate = startDate.Date;
var enDate = endDate.Date.AddDays(1);
var str = search;

List<LoanAccount> loanAccounts  =
    (from loanCustomer in db.LoanAccounts
    where (loanCustomer.Account_Number.Contains(search) || search == null)
    //                          Notice the "strictly less" comparison  v
    && (loanCustomer.Date_Opened >= stDate && loanCustomer.Date_Opened < enDate)
    select loanCustomer).ToList();
,

DateDiffDay 函数计算 startDate 和 endDate 之间的天数。 所以你可以试试这个:


 where (loanCustomer.Account_Number.Contains(search) || search == null)
       && EF.Functions.DateDiffDay(stDate,loanCustomer.Date_Opened)>=0 
       && EF.Functions.DateDiffDay(loanCustomer.Date_Opened,enDate) >=0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。