2

我有两个对象。

 [DataContract]
 public class Record
 {
    [DataMember]
    public string Id { get; set; }
 }

而这堂课:

public class BatteryStatus : Record
{
    [DataMember]
    public DateTime RetrieveTime { get; set; }

}

我使用Lite DB作为本地 NoSQL 选项来查询和保存数据。我需要在一段时间后查找并删除基于的值。这是我这样做的代码:

            var col = db.GetCollection<BatteryStatus>(CollectionName);
            var test = col.FindAll()
                .Where(x => x.Id == status.Id).ToList();
            var result = col.Find(Query.EQ("Id", status.Id.ToString())).ToList();

测试与对象一起返回,但结果值不返回。Lite DB 仅使用 Query 或 BSONId 作为删除对象的一种方式。我没有附加 BSON id(这是一个引用的定义,所以我无法更改它)。

如何使用“查询”功能来获取嵌套值以便删除它?

4

2 回答 2

2

类有属性,BSON 文档有字段。默认情况下,LiteDB 将 BSON 文档中的所有属性名称转换为相同的名称,但_id作为文档标识符的字段除外。

如果您想使用 Linq 进行查询,您将使用属性表达式。如果您使用Query对象类,则必须使用字段名称。

var result = col.FindById(123);
// or
var result = col.FindOne(x => x.Id == 123);
// or
var result = col.FindOne(Query.EQ("_id", 123));

Find using_id总是返回 1 个(或零个)文档。

于 2016-02-21T18:52:28.723 回答
1

我发现了 LiteDB 的问题,因为我使用了“Id”的属性名称,BSON 将其解释为 JSON 对象的“_id”,并合并了它们的两个值。我通过将“Id”属性重命名为其他东西来解决这个问题。

于 2016-02-18T15:29:58.530 回答