按ID搜索时,LiteDb集合返回无效数据

时间:2019-08-16 10:57:22

标签: c# litedb

我尝试通过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

1 个答案:

答案 0 :(得分:0)

欢迎来到社区!

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

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>。您可以在主要帖子中分享其结构吗?