1

だから私は私のUserDatabse.csクラスでこのメソッドを使用して、特定の日付のためにクラス「シュガー」のインスタンスを取得しようとしています:取得エラー:System.NotSupportedException際日付の比較

public List<Sugar> GetSugarDate(DateTime dt) 
     { 
       var bld = database.Table<Sugar>().Where(mi => mi.Time.Date == dt.Date).ToList(); 
      return bld; 
     } 

*に入れたままにしてください現時点ではアプリにはSugarのインスタンスがないので、日付の比較はnullと実際の日付の間にあることに注意してください。私はそれがエラーを引き起こしていると思う、任意のソリューションは高く評価されるだろう。

このメソッドの呼び出しは、別のクラスでは、このように構成されています

  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: Member access failed to compile expression at SQLite.TableQuery'1[T].CompileExpr(System.Linq.Expressions.Expression expr, System.Collections.Generic.List'1[T]queryArgs)[0x006cc]in <9b4aaa861238418bec74a2ddde70f09>:0 at SQLite.TableQuery'1[T].CompileExpr(System.Linq.Expressions.Expression expr, System.Collections.Generic.List'1[T]queryArgs)[0x0009d]in <9b4aaa861238418bec74a2ddde70f09>:0 at SQLite.TableQuery'1[T].CompileExpr(System.Linq.Expressions.Expression expr, System.Collections.Generic.List'1[T]queryArgs)[0x0005f]in <9b4aaa861238418bec74a2ddde70f09>:0 at SQLite.TableQuery'1[T].CompileExpr(System.Linq.Expressions.Expression expr, System.Collections.Generic.List'1[T]queryArgs)[0x00008]in <9b4aaa861238418bec74a2ddde70f09>:0 at 
System.Collections.Generic.List'1[T]..ctor(System.Collections.Generic.IEnumerable'1[T]collection)[0x00062] in /Users/builder/jenkins/workspace/xamarin-android/external/mono/mcs/class/referencesource/generic/list.cs:98 ..... 

エラーは、この特定の行で発生します

var bld = database.Table<Sugar>().Where(mi => mi.Time.Date == dt.Date).ToList(); 

どこが間違っていますか?

+0

私はあなたのミスがmi.Time.Date' 'であると思います。データベースに「mi」がない場合、null参照例外がスローされます。この方法でコーディングしてください: 'mi?.Time.Date'。 –

+0

このようにすると、インラインエラーが発生します。式ツリーlambdaには、NULL伝播演算子が含まれていない可能性があります – TigerLionCheetah

答えて

1

この部分はSQLに変換できません。

mi => mi.Time.Date 

あなたは使用して試すことができます:

var bld = database.Table<Sugar>().ToList().Where(mi => mi.Time.Date == dt.Date).ToList(); 

Accessing to the Date part of a DateTime column (mi.Time.Date) can not be translated to SQL using Linq, for this reason, your statement failed initially. So, using ToList fetches all records in memory allowing us to query with Linq to Object method not Linq to SQLite.

+0

コードはあなたの答えでコンパイルされていますが、 – TigerLionCheetah

+1

ああ、意味があります。どうもありがとう。できます :) – TigerLionCheetah