我正在尝试创建这样的SQLITE查询(第一种方法):
int count;
using ( var db = new SQLiteConnection( new SQLitePlatformWinRT(), DbPath ) )
{
count = ( from p in db.Table<TickRecord>()
where (p.TickStartDate.LocalDateTime >= start && p.TickEndtDate.LocalDateTime <= end )
select (int)p.DurationInSeconds ).Sum();
}
return count;
运行查询时,应用程序在where子句上崩溃。
我能够像这样(第二种方法)实现它:
ObservableCollection<TickRecord> records;
// Create a new connection
using ( var db = new SQLiteConnection( new SQLitePlatformWinRT(), DbPath ) )
{
records = new ObservableCollection<TickRecord>( db.Table<TickRecord>().Select( i => i ) );
}
int count = records.Where( record => record.TickStartDate.LocalDateTime >= start && record.TickEndDate.LocalDateTime <= end ).Sum( record => record.DurationInSeconds );
使用我的第一种方法有没有办法实现同样的目标?
THX
答案 0 :(得分:1)
您不应在查询中使用成员访问'。LocalDateTime'。 Linq处理器无法将'.LocalDateTime'转换为sqlite查询,这很简单,因为sqlite中没有等效函数。
结果是你伤心地抛出异常:
[...]会员访问失败[...]。
如果您需要'。LocalDateTime'的功能,那么您应该尝试从数据库中获取该表的所有条目,并在以后使用where查询,如果您已经收到所有数据
class Location < ActiveRecord::Base
has_many :rates, foreign_key: :rateable_id
end
class Rate < ActiveRecord::Base
belongs_to :location, foreign_key: :rateable_id
end
答案 1 :(得分:0)
根据whymatter修改代码:
int count;
using ( var db = new SQLiteConnection( new SQLitePlatformWinRT(), DbPath ) )
{
count = ( from p in db.Table<TickRecord>()
where ( p.TickStartDate >= start && p.TickEndDate <= end )
select (int)p.DurationInSeconds ).Sum();
}
return count;
THX!