c# - C# LiteDB LiteCollection.FindOne 返回错误值
问题描述
我正在使用 LiteDB v5.0.11 并且有一组具有以下结构的元素:
public class BalanceItem
{
[BsonId]
public int ContractId { get; set; }
public decimal Balance { get; set; }
public DateTime UpdateTime { get; set; }
}
不时通过此方法查询此集合:
public bool GetBalance(int cid, out decimal value)
{
lock (Locker)
{
using (var Database = new LiteDatabase(PaymentDbConnectionString))
{
var Balance = Databasee.GetCollection<BalanceItem>(); //if recent update was some days ago, then the record is invalid
var BalanceInfo = Balance.FindOne(x => x.ContractId == cid && (DateTime.Now - x.UpdateTime) < TimeSpan.FromDays(Default.BalanceCacheDays));
if (BalanceInfo == null)
{
value = -1;
return false;
}
value = BalanceInfo.Balance;
return true;
}
}
}
测试时,我通过 LiteDB Studio 以只读方式访问数据库,其内容如下:
当我尝试获取 ID 为 6077、BalanceCacheDays 设置为 2 和当前系统时间 (11.08.2021 ....) 的客户端的余额时,它返回带有旧 UpdateTime 值而不是 null 的记录。
在当前情况下不应该返回 null 吗?
此外,在查询不涉及 Datetime 结构的值时,返回值似乎是正确的
我是否遗漏了什么或者这种行为的可能原因是什么?
解决方案
推荐阅读
- twilio - 在 ASP.NET WebApi 中处理来自 twilio 的来电
- node.js - 为什么 REACT 应用程序的 localbuild 在 Windows 机器的 Eclipse 中的 nodeSetup 任务中失败?
- asp.net - Asp.net 4.5.2 与 Oracle12c 之间的兼容性
- php - 支持在 Laravel 中更改链接 Htaccess
- sql - 将城市和州从 1 列中分离出来;但是,现在返回的字段要少得多。为什么?
- python - 在 Python 中选择彼此最不同的字符串
- javascript - 使用 VeeValidate,我如何查看字段是否已被触摸且有效?
- sql - 字段列表中的列“order_date”不明确
- java - 如何在没有提交的情况下过滤我们在 Jenkins 上构建的 Gradle 中的测试?
- dynamics-crm - 这个 "IsValidODataAttribute": true 在 /api/data/v 中是什么意思...?