我尝试通过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
答案 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>
。您可以在主要帖子中分享其结构吗?