首页 > 解决方案 > LiteDb 集合在按 id 搜索时返回无效数据

问题描述

我尝试通过它在 liteDb 中的 id 来查找实体。但是结果返回了错误的实体(带有另一个 id)。它仅在一个客户的一个实体上复制(其他客户效果很好)。

我在我的程序中使用 LiteDB 4.1.2.0,我也尝试在 LiteDBViewer (4.1.0.0) 中找到实体。

var id = Guid.Parse("9fe943d3-97d4-4301-8279-eca89b4209ee"); 
var order = dbOrders.FindById(id);

//dbOrders is LiteCollection<Order>

我希望 liteDb 将返回具有我的 id (9fe943d3-97d4-4301-8279-eca89b4209ee) 的实体,但实际输出实体的 id = 2aba5886-ca30-4d67-9cf8-558441ef5eb6。

liteDbViewer 的结果:https ://i.ibb.co/WntgmZK/2019-08-16-1230.png

标签: c#litedb

解决方案


欢迎来到社区!

根据您提供的信息,您可以尝试以下操作:

var id = Guid.Parse("9fe943d3-97d4-4301-8279-eca89b4209ee"); 
var order = dbOrders.FindOne(o => o.Id == id);

确保“订单”列中的属性“Id”属于“guid”类型。如果不是,则将其设为一个,或者id.ToString()如果它是字符串类型,则使用它。

https://github.com/mbdavid/LiteDB/wiki/Queries

编辑:

static void Main(string[] args)
{
    // Open database (or create if not exits)
    using (var db = new LiteDatabase(@"MyData.db"))
    {
        // Get user collection
        var users = db.GetCollection<User>("users");

            var id = Guid.Parse("8dd0997e-42b1-432d-820e-4637dd08fa2e");
            //var userById = users.FindOne(x => x.Id == id);
            var userById = users.FindById(id);
            if (id != userById.Id)
               Console.WriteLine("Error!");
    }
}

我不确定问题可能出在哪里。上面的代码按预期工作。唯一的区别是您使用LiteCollection<Order>的是GetCollection<Order>. 你能在你的主帖中分享它的结构吗?


推荐阅读