所以我遇到了一段时间以来一直使用的LINQ查询问题,现在它似乎没有按预期工作。
messagesWithoutConditional =
await
MobileServiceInstance.GetSyncTable<Messages>()
.OrderByDescending(key => key.SentDate)
.Take(50)
.Where(
p =>
(p.Uuid == myUuid && p.RecipientUuid == otherUuid) ||
(p.Uuid == otherUuid && p.RecipientUuid == myUuid))
.ToListAsync();
所以我想说这个查询只返回两方之间发送的最后50条消息。现在,如果我想添加一个附加条件,即50条消息也应该在特定日期之前,我希望能做到这样的事情
messagesWithConditional =
await
MobileServiceInstance.GetSyncTable<Messages>()
.OrderByDescending(key => key.SentDate)
.Take(50)
.Where(
p =>
((p.Uuid == myUuid && p.otherUuid == recipientUuid) ||
(p.Uuid == otherUuid && p.RecipientUuid == myUuid))
&& p.SentDate < 'some date')
.ToListAsync();
让我们假设我应该期望这返回40条消息,但它会返回0.但是,如果我将查询替换为此
messagesWithConditional = messagesWithoutConditional.Where(p => p.SentDate < 'some date').ToList();
然后我将通过查询原始表达式的结果来收到40条预期的消息。
第二种方法与第一种方法有何不同?理想情况下,我想使用&&
运算符添加新的条件表达式,而不是中断第二个where
子句
修改
我还应该注意,时间是UTC格式,SentDate
属性类型为DateTimeOffset
截至目前,它似乎是一个错误,除非做出其他一些见解。有关更多信息,请参阅bug报告
答案 0 :(得分:2)
.Where
应放在.OrderByDescending
和.Take(50)