我的数据库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
非常感谢您的帮助
答案 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>
,它是一个集合(我更改了第二个代码示例)。