2016-06-30 10 views
0

Azureテーブルストレージにいくつかのレコードが保存されています。私は、現在ログインしているユーザーのために、特定の日/日付だけテーブルからレコードを取得しようとしています。LINQ Azureテーブルサービスに対するクエリが失敗します

私のクエリは何も返さないので、今月のレコードが3つあることはわかっていますが、私のリストは空です。

この場合、クエリが失敗する理由はわかりません。特定のユーザーの特定の日付のレコードを取得するにはどうすればよいですか?どんな助け?

これは私がこれまで試したものです:

public async Task<Result<List<Alert>>> FetchAlertsForDate (DateTime date) 
    { 

    try { 

     var fromDate = new DateTime(date.Year,date.Month,date.Day,0,0,0); //lets create a 12:00:00 AM date 

     var toDate = new DateTime(date.Year,date.Month,date.Day,23,59,59); //lets create a 23:59:59PM date 

     var alertTable=client.GetSyncTable<Alert>(); 

     var alerts = await alertTable.Where(n=>n.AccountId==client.CurrentUser.UserId).Where(n=> n.StartDate >= fromDate && n.StartDate <= toDate).ToListAsync(); 

     return Result<List<Alert>>.Success(alerts); 


    } catch (Exception ex) { 
      return Result<List<Alert>>.Failure (ex.Message + ex.StackTrace);  
     } 

    } 
+0

'client.CurrentUser.UserId'の値をデバッグしようとしましたか? – user3185569

+0

@ user3185569はい、あります。値は正しいです。 2番目のWhere句を取り出し、このユーザーのすべてのアラートを取得すると、すべてのアラートがテーブルに戻されます。 – naffie

答えて

0

何らかの理由で、同じクエリが機能しなくなりました。私は最初の部分を削除することでそれを改善しました。そこでは、現在のユーザーのIDを確認していました。それは私の場合には必要ではなかった。

ので、最終的なクエリは次のようになります。

var alerts = await alertTable.Where(n=> n.StartDate >= fromDate && n.StartDate <= toDate).ToListAsync(); 

これは現在、ユーザーの詳細をすべてログに記録されたを引き上げます。

0

あなたが書いたコードは、私は特定の日付のレコードを引くにはどうすればよいあなたの質問

に答えることは明白なバグが含まれていません、特定のユーザーのために?

あなたのメソッドで使用する日付範囲ではなく、このようなdateTimeの日付部分を比較することができます。

var alerts = await alertTable.Where(n=>n.AccountId==client.CurrentUser.UserId).Where(n=> n.StartDate.Date == date.Date).ToListAsync(); 

私はあなたが2番目のwhere節も離れていると思います。

var alerts = await alertTable.Where(n=>n.AccountId==client.CurrentUser.UserId && n.StartDate.Date == date.Date).ToListAsync(); 

あなたはユーザーIDと日付の特定の組み合わせのために、その後すべてのレコードを取得されていません場合は、最も可能性が高い事はその正確な組み合わせを持つすべてのレコードが存在しないということです。

+0

上記の両方の提案を試しましたが、いずれも問題を解決できないようです。 'Where 'モバイルサービスクエリ式' n.StartDate.Date 'でメンバ' Date 'がサポートされていません。Where節を省略した2番目の理由はありませんテーブルにレコードがあっても、失敗しますが、0のカウントを返します。 – naffie

+0

私はあなたがユーザーを確認したのを見ました。日付はどうですか? 3つのレコードの日付は、探しているものと同じですか? –

+0

日付については、コレクションビュー(グリッドビュー)を使用してカレンダーを描画しています。このクラスには、 'GetCell'を呼び出す前に呼び出される' WillDisplayCell'オーバーライドがあります。ここでは、現在の月の各日付/日と各セル(実際は毎日)をループします。私は上記の関数を呼び出し、日付を渡します。論理は、もし私が毎日のすべてのアラートを取得し、私たちが毎日得る応答に応じてセルをカスタマイズしたいと思っています。 – naffie

関連する問題