datetime如何工作以及如何在Windows窗体ADO Entities中比较两个日期?

时间:2019-02-14 21:22:14

标签: c# winforms entity-framework linq datetime

我的数据库sql服务器中有“ Deposit”表,其中包含“ DepositDate”列,其类型为datetime。 我有今天日期的行,其中之一是2019-02-14 22:26:50.000 今天的日期是相同的,我的意思是2019-02-14 但是,当尝试通过下面的代码获取今天的所有行时,它将不起作用。我认为随着时间的流逝,时间会有一些变化。 但是现在写,我只对一天感兴趣,但是我想保留数据库中的datetime类型。 因此,我必须在搜索的日期上加上时间吗?我使用Linq和实体

我确实喜欢这样,我没有收到错误,但没有找到该行。返回空的datagridview

DateTime TodayDate = Convert.ToDateTime(DateTime.Now.ToString());
 var deposit = (from u in db.Deposit
                                   where u.DepositDate == TodayDate
                                   select u).ToList();
                    if (deposit != null)
                    {
                        dgvDeposit.DataSource = null;
                        dgvDeposit.DataSource = deposit;
                    }

我什至尝试了但我还是犯错了

  LINQ to ADO实体中不支持

date

DateTime TodayDate = Convert.ToDateTime(DateTime.Now.Date);
where u.DepositDate.Value.Date == TodayDate

非常感谢您的帮助

1 个答案:

答案 0 :(得分:2)

如果要使用DepositDate上可能具有的任何索引,则必须在开始日期和结束日期之间进行过滤。如果您不关心是否存在Canonical Date Functions,则可以使用该时间从数据库值中剥离时间。

DateTime today = DateTime.Today;
DateTime tomorrow = today.AddDays(1);

var deposit = (from u in db.Deposit
               where u.DepositDate >= today && u.DepositDate < tomorrow
               select u).ToList();

或者作为lambda

var deposits = db.Deposit
                .Where(u => u.DepositDate >= today && u.DepositDate < tomorrow)
                .ToList();

作为附带说明和意见,通常建议对DbSet<T>上的DbContext属性(例如db.Deposits)进行复数处理。您的变量deposit的类型也是如此,它的类型为List<Deposit>,它是一个集合(我更改了第二个代码示例)。