在一个MAUI项目中,我有一个非常简单的表,我想在其中保存用户在应用程序上花费的时间。基于这个原因,我定义了这个模型
public class Statistic
{
public DateTime ScreenDate { get; set; }
public long Minutes { get; set; }
}
然后,在持久层中,我创建数据库,然后我有一个函数,我试图读取带有日期的记录。在下面的代码中,dt
是定义为DateTime
的参数。
List<Statistic> rsl = await Database.Table<Statistic>()
.Where(s =>
s.ScreenDate.ToShortDateString() == dt.ToShortDateString())
.ToListAsync();
当我尝试运行这段代码时,我得到一个错误
SQLite.SQLiteException:'无此功能:到短日期字符串'
我尝试了其他函数--比如ToString()--得到了一些结果。
更新
我尝试使用System.Data.Entity.SqlServer
,
List<Statistic> rsl = await Database.Table<Statistic>()
.Where(s => SqlFunctions.DatePart("year", s.ScreenDate) == dt.Year &&
SqlFunctions.DatePart("month", s.ScreenDate) == dt.Month &&
SqlFunctions.DatePart("day", s.ScreenDate) == dt.Day).ToListAsync();
我得到了一些错误
1条答案
按热度按时间kpbpu0081#
SQLite无法将C#方法转换为SQL方法。如果你尝试过使用 SqlFunctions,但效果不好,让我们使用一些经典的原始C#代码和逻辑:)
你想要得到的是某一天的统计数据列表(忽略时间),所以我们只需要创建两个新的变量,startDate和endDate,其中startDate是你的原始日期,但忽略时间(00:00:00),endDate是第二天,也忽略时间(00:00:00)。之后,我们只需要过滤大于或等于startDate和小于endDate。
真实的示例:
**原始日期:**08/08/2023 10:07:25
**开始日期变量:**08/08/2023 00:00:00
**结束日期变量:**09/08/2023 00:00:00
其中条件:ScreenDate >= 08/08/2023 00:00:00且ScreenDate < 09/08/2023 00:00:00
因此,它将返回08/08/2023 00:00:00到08/08/2023 23:59:59(第二天之前的1个刻度)之间的所有记录。