对Azure表服务的LINQ查询失败

本文关键字:LINQ 查询 失败 服务 Azure | 更新日期: 2023-09-27 17:53:16

我有一些记录保存在我的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);    
        }
   }

对Azure表服务的LINQ查询失败

您编写的代码没有明显的错误来回答您的问题

如何为特定的用户提取特定日期的记录?

比起在方法中使用日期范围,您可以像这样比较dateTime的日期部分;

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

我认为你也可以去掉第二个where从句;

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

如果你没有得到任何记录,那么对于userId和Date的特定组合,那么最有可能的事情是没有任何记录与那个确切的组合。

由于某种原因,相同的查询最终成功了。我通过删除第一部分来改进它,在那里我检查当前用户的id。这是不必要的,因为在我的情况下。

所以最后的查询是这样的:

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

现在,这将调出所有登录用户的详细信息。