c# - 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
解决方案
欢迎来到社区!
根据您提供的信息,您可以尝试以下操作:
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>
. 你能在你的主帖中分享它的结构吗?
推荐阅读
- javascript - toLocaleDateString 返回意外的格式化时间
- python - Python Flask 中关于 500 Internal Server Error 的问题
- python - 我的按钮被切断并且没有显示其中的所有文本(在侧面菜单中)
- bash - 即使使用双引号,SED 无法在 bash 脚本中替换文本也会失败
- python - Python:如何为我自己的类实现@运算符
- xamarin.forms - 在 Azure DevOps 中使用许可的 NuGet 包
- regex - 在包含括号的代码上使用 SED
- kotlin - 如何将子类“加入”到超类型实例中?
- c# - 如何在单元测试中调用和运行一个类?C#
- android - 有什么方法可以让颤振打开更快?