如果存在日期,我似乎无法查询数据库。请帮忙。
DateTime value = new DateTime(2018, 10, 26);
item = await table.Where(todoItem => todoItem.Date == value.date)
.ToListAsync();
我认为c#编写日期和SQL的格式不同,因此无法找到匹配项。此外,数据库正确链接到应用程序,因为我能够查询同一个表中的其他行。
答案 0 :(得分:3)
如前所述,这可能是因为数据库中的DateTime列包含时间信息。
重写您的查询:
DateTime value = new DateTime(2018, 10, 26);
item = await table.Where(todoItem => todoItem.Date >= value &&
todoItem.Date < value.AddDays(1))
.ToListAsync();
这将检索属于指定范围的所有记录(即与给定日期匹配的日期,DBMS将能够使用可能在日期列上定义的索引。
答案 1 :(得分:0)
与Brandon的答案类似......由于todoItem.Date
包括Date
属性的时间部分,很可能会发生这种情况。
我假设属性Date
的类型为DateTime
,因此您可以这样做:
DateTime value = new DateTime(2018, 10, 26);
item = await table.Where(todoItem => DbFunctions.TruncateTime(todoItem.Date) ==
value).ToListAsync();
<强> DbFunctions.TruncateTime 强>
当用作LINQ to Entities查询的一部分时,此方法调用规范的TruncateTime EDM函数返回给定日期并清除时间部分。
以下是有关DbFunctions.TruncateTime
的更多信息。
请告诉我这是否有帮助!
答案 2 :(得分:-1)
这很可能是因为在日期中包含时间,而不是将它们格式化为实际日期字符串。您可以使用.toLocaleString()
方法解决此问题。这样的事情应该有效:
DateTime value = new DateTime(2018, 10, 26);
item = await table.Where(todoItem => todoItem.Date.toLocaleString() ==
value.date.toLocaleString())
.ToListAsync();