我正在创建一个方法,该方法将最后一个事务插入litedb。

我有一个日期字符串,已保存。

这是课程:

public class TransactionPair : TransactionTwo
{
    private string returnT;
    public TransactionPair() { /* making an empty declaration so we don't NEED to pass it anything if we don't want. */}

    public TransactionPair(string returnT, string request)
    {
        this.returnT = returnT;
        JObject o = JObject.Parse(returnT);
        AuthCode = o.GetValue("AuthoCode").ToString();
        TransType = o.GetValue("TransType").ToString();
        AmountString = o.GetValue("AmountString").ToString();
        CardType = o.GetValue("CardType").ToString();
        Last4 = o.GetValue("Last4").ToString();
        RefID = o.GetValue("RefID").ToString();
        CardToken = o.GetValue("CardToken").ToString();
        ExpDate = o.GetValue("ExpDate").ToString();
        DateString = DateTime.Now.ToString("d-MMM-yyyy:HH:mm:ss.f", DateTimeFormatInfo.InvariantInfo);
        Request = request;
    }

    public string Request { get; set; }
}


这是转座子对的插入方法。

  public void InsertTransactionPair(string json, string request)
    {
        JObject transObj = JObject.Parse(json);

        using (var db = new LiteDatabase(connectionString))
        {
            var collection = db.GetCollection<TransactionPair>("TransactionPair");
            var transactionTwo = new TransactionPair
            {
                AuthCode = GetValue(transObj, "AuthCode"),
                TransType = GetValue(transObj, "TransType"),
                AmountString = GetValue(transObj, "AmountString"),
                CardType = GetValue(transObj, "CardType"),
                Last4 = GetValue(transObj, "Last4"),
                RefID = GetValue(transObj, "RefID"),
                CardToken = GetValue(transObj, "CardToken"),
                DateString = DateTime.Now.ToString("d-MMM-yyyy:HH:mm:ss.f", DateTimeFormatInfo.InvariantInfo),
                Request = request
            };
            collection.Insert(transactionTwo);

            collection.EnsureIndex(x => x.RefID);
        }
    }


我需要一种Linq方法来查找最新条目,还是像一个队列,在其中我可以弹出返回查询中的第一个值并获取最新的?

最佳答案

默认情况下,查询时LiteDB中的记录按主键排序(默认为_id)。从您提供的代码中,我无法确定主键是什么数据类型,但是如果它是整数并且没有手动设置,则可以简单地查找最后一条记录:

collection.FindOne(Query.All(Query.Descending))


如果不能保证主键顺序正确(例如,如果数据类型为Guid),则需要使用另一种方法。不幸的是,我认为DateString不会有太大帮助:对它排序的任何查询都将按字母顺序而不是按时间顺序排序。如果可能,我建议使用DateTime属性存储当前时间戳,而不是将其存储为string。这样做可以使您轻松地对记录进行排序,例如:

collection.EnsureIndex("Timestamp");
collection.FindOne(Query.All("Timestamp", Query.Descending));

07-26 09:28