首页 > 解决方案 > 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 以只读方式访问数据库,其内容如下:

根据 liteDB 工作室的数据库内容

当我尝试获取 ID 为 6077、BalanceCacheDays 设置为 2 和当前系统时间 (11.08.2021 ....) 的客户端的余额时,它返回带有旧 UpdateTime 值而不是 null 的记录。

在当前情况下不应该返回 null 吗?

此外,在查询不涉及 Datetime 结构的值时,返回值似乎是正确的

我是否遗漏了什么或者这种行为的可能原因是什么?

标签: c#windowslitedb

解决方案


推荐阅读