因此,我尝试在UserDatabase.cs类中使用以下方法检索特定日期的“Sugar”类的示例:
public List<Sugar> GetSugarDate(DateTime dt)
{
var bld = database.Table<Sugar>().Where(mi => mi.Time.Date == dt.Date).ToList();
return bld;
}
- 请记住,应用程序目前没有任何Sugar示例,因此日期比较是在空值和实际日期之间进行的。我认为这是导致错误的原因,任何解决方案都将受到赞赏。
在另一个类中,对此方法的调用如下所示:
DateTime Time = DateTime.Now;
ObservableCollection<Image> Sugar_Count = new ObservableCollection<Image>();
Image s = new Image();
s.Source = "drawable/soda.png";
var xa = App.Database.GetSugarDate(Time);
Sugar.cs类定义如下:
public class Sugar
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public DateTime Time { get; set; }
public int DrinkCount { get; set; }
public Sugar()
{
Time = DateTime.Now;
DrinkCount = 0;
}
}
现在得到的错误是:
System.NotSupportedException:成员访问未能编译SQLite上的表达式。TableQuery '1 [T]。CompileExpr(系统.链接.表达式.表达式表达式,系统.集合.泛型.列表' 1 [T]queryArgs)[0x 006 cc]位于<9b4aaa861238418bec74a2ddde70f09>:0上的SQLite。TableQuery '1 [T]。CompileExpr(系统.链接.表达式.表达式表达式,系统.集合.泛型.列表' 1 [T]queryArgs)[0x 0009 d]位于<9b4aaa861238418bec74a2ddde70f09>:0上的SQLite. TableQuery '1 [T].CompileExpr(系统.链接.表达式.表达式表达式,系统.集合.泛型.列表'1 [T]queryArgs)[0x 0005 f]in<9b4aaa861238418bec74a2ddde70f09>:0 at SQLite. TableQuery' 1 [T].CompileExpr(系统.链接.表达式.表达式表达式,系统.集合.泛型.列表'1 [T]queryArgs)[0x 00008]in<9b4aaa861238418bec74a2ddde70f09>:0 at系统.集合.泛型.列表' 1 [T].. ctor(系统.集合.泛型. IEnumerable '1 [T]集合)[0x 00062]位于/用户/构建器/jenkins/工作区/xamarin-android/外部/mono/mcs/类/引用源/泛型/列表.cs:98.....
错误发生在以下特定行:
var bld = database.Table<Sugar>().Where(mi => mi.Time.Date == dt.Date).ToList();
我哪里做错了?
3条答案
按热度按时间pepwfjgg1#
表达式的这一部分无法转换为SQL。
您可以尝试使用:
访问
DateTime
列(mi.Time.Date
)的Date部分无法使用Linq转换为SQL,因此,您的语句最初失败。因此,使用ToList
获取内存中的所有记录,允许我们使用Linq to Object方法而不是Linq to SQLite进行查询。kse8i1jr2#
这是一个小janky,但我有这个工作:
此外,请确保使用以下命令初始化数据库连接:
如果要查询可为null的DateTime
44u64gxh3#
那个小混蛋的代码对我有用