为什么使用SQLITE where子句不起作用?

时间:2016-04-29 22:30:53

标签: c# sqlite win-universal-app

我正在尝试创建这样的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

2 个答案:

答案 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!