2016-04-29 20 views
0

私はこの(最初のアプローチ)などのSQLiteのクエリを作成しようとしています:where節が機能しない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を

+3

例外はありますか? – Michael

+1

例外がスローされました:SQLite.Net.dllの 'System.NotSupportedException' メンバアクセスが式をコンパイルできませんでした –

答えて

1

あなたはメンバーのアクセス'.LocalDateTime'クエリ内では使用しないでください。 Linqプロセッサは、 '.LocalDateTime'をsqliteクエリに変換することはできません。これは、sqliteに同等の機能がないためです。

その結果、あなたが悲しいと例外がスローされます。

[...]メンバーのアクセスが[...]失敗しました。

あなたはの「.LocalDateTime」機能が必要な場合は、データベースからテーブルのすべてのエントリを取得しようとする必要があり、あなたはすでに、すべてのデータを受信した場合、後でどこクエリを使用します。

 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を:whymatterあたりのコードを修正

int count; 
using (var db = new SQLiteConnection(new SQLitePlatformWinRT(), DbPath)) 
{ 
    var results = db.Table<TickRecord>().ToList(); 
    count = (from p in results 
       where (p.TickStartDate.LocalDateTime >= start && p.TickEndtDate.LocalDateTime <= end) 
       select (int)p.DurationInSeconds).Sum(); 
} 
return count; 
0

関連する問題